Algorithm & Data Structure/Sort
Insertion Sort(삽입 정렬)
슝슝이입니다
2024. 3. 30. 00:18
반응형
Insertion sort 란?
삽입 정렬은 정렬되지 않은 리스트를 순차적으로 이미 정렬된 배열의 적절한 위치에 삽입하여 정렬을 완성하는 방식입니다. 이 알고리즘은 부분적으로 정렬된 배열을 유지하며, 각 반복에서 하나의 원소를 정렬된 배열 부분으로 이동시킵니다.
Insertion sort 사이클 설명
삽입 정렬의 한 사이클은 다음과 같이 진행됩니다:
- 배열의 두 번째 요소를 선택합니다(첫 번째 요소는 이미 정렬된 상태로 간주).
- 선택된 요소를 그 이전의 요소들과 비교하여 적절한 위치를 찾습니다.
- 선택된 요소가 이전 요소보다 크면 그 위치에 삽입됩니다.
- 배열의 모든 요소가 이 과정을 거쳐 정렬될 때까지 반복합니다.
이 사이클은 배열의 각 요소가 올바른 위치에 있을 때까지 계속됩니다.
Insertion sort 시간복잡도와 공간복잡도
- 시간 복잡도:
- 최선의 경우(Best Case): 𝑂(𝑛) - 이미 정렬된 배열을 다룰 때
- 평균 및 최악의 경우(Worst Case): 𝑂(𝑛2) - 역순으로 정렬된 배열을 다룰 때 또는 무작위 배열
- 공간 복잡도: 𝑂(1) - 삽입 정렬은 추가적인 저장 공간을 필요로 하지 않으며, 인플레이스 정렬 방식입니다.
Insertion sort 의 장단점
장점:
- 단순하고 직관적: 이해하고 구현하기 쉽습니다.
- 인플레이스 정렬: 추가적인 메모리를 요구하지 않습니다.
- 안정 정렬: 동일한 값을 가진 요소의 상대적 순서가 유지됩니다.
- 부분적으로 정렬된 배열에 효율적: 이미 정렬된 데이터에 대해 매우 빠릅니다.
단점:
- 비효율적인 시간 복잡도: 큰 데이터 세트에 대해 𝑂(𝑛2)의 시간 복잡도를 가집니다.
- 비교 및 이동 횟수: 평균적으로 많은 비교와 이동이 필요합니다.
Insertion sort 코드
golang
package main
import "fmt"
// InsertionSort 함수는 삽입 정렬을 구현한다.
func InsertionSort(arr []int) {
for i := 1; i < len(arr); i++ {
key := arr[i]
j := i - 1
// key보다 큰 arr[j]를 한 위치 뒤로 이동
for j >= 0 && arr[j] > key {
arr[j+1] = arr[j]
j = j - 1
}
arr[j+1] = key
}
}
func main() {
arr := []int{12, 11, 13, 5, 6}
InsertionSort(arr)
fmt.Println("Sorted array is:", arr)
}
java
public class InsertionSort {
/* 삽입 정렬을 수행하는 함수 */
void sort(int arr[]) {
int n = arr.length;
for (int i=1; i<n; ++i) {
int key = arr[i];
int j = i-1;
/* key보다 큰 arr[j]를 한 위치 뒤로 이동 */
while (j>=0 && arr[j] > key) {
arr[j+1] = arr[j];
j = j-1;
}
arr[j+1] = key;
}
}
// 메인 메소드로 실행
public static void main(String args[]) {
int arr[] = {12, 11, 13, 5, 6};
InsertionSort ob = new InsertionSort();
ob.sort(arr);
System.out.println("Sorted array");
for (int i=0; i<arr.length; ++i)
System.out.print(arr[i] + " ");
}
}
python
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i-1
while j >= 0 and key < arr[j]:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
# 예제 배열
arr = [12, 11, 13, 5, 6]
insertion_sort(arr)
print("Sorted array is:", arr)
반응형