728x90
소개
- 선택한 요소를 선택한 위치의 앞쪽에 있을 수 있는 올바른 위치에 삽입합니다.
- 2번 째 요소부터 선택해서 정렬 작업을 수행합니다.
- 선택한 요소 앞쪽은 항상 정렬되어 있는 구간입니다.
- 정렬이 수행되면서 정렬된 구간을 탐색하는 내부 반복문의 반복 횟수는 증가합니다.
- 배열의 요소가 n개 있을 때 시간복잡도는
O(n^2)
구현
public class InsertionSort {
static void insertionSort(int[] arr) {
// 정렬은 배열의 2번째 요소부터 시작합니다.
for (int i = 1; i < arr.length; i++) {
int j;
int temp = arr[i];
// 정렬된 구간을 뒤에서부터 앞으로 순회한다.
// 처음 temp와 arr[j]는 같은 대상이다.
// arr[j - 1]이 temp보다 크면 temp는 그 앞에 삽입되어야 하므로 arr[j - 1]을 뒤로 한 칸 밀어낸다.
for (j = i; j > 0 && arr[j - 1] > temp; j--) {
arr[j] = arr[j - 1];
}
// temp가 놓일 j가 결정되었다.
// temp를 배열의 j번째에 삽입한다.
arr[j] = temp;
}
}
}
'Problem Solving > 알고리즘' 카테고리의 다른 글
퀵 정렬(Quick Sort) (0) | 2021.06.18 |
---|---|
쉘 정렬(Shell Sort) (0) | 2021.06.18 |
선택 정렬(Selection Sort) (0) | 2021.06.07 |
버블 정렬(Bubble Sort) (0) | 2021.06.07 |
최소 신장 트리 : 크루스칼(Kruskal) (0) | 2021.04.29 |