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 |