초코레

단순 삽입 정렬(straight insertion sort) / 셔틀 정렬(shuttle sort) 본문

알고리즘

단순 삽입 정렬(straight insertion sort) / 셔틀 정렬(shuttle sort)

초코레 2019. 12. 28. 16:46
  • 아직 정렬되지 않은 부분의 첫 번째 요소를 정렬된 열의 '알맞은 위치에 삽입'하는 작업을 n - 1회 반복하여 정렬하는 알고리즘
  • 2번째 요소부터 선택하여 진행한다.
  • 선택한 요소의 왼쪽에 이웃한 요소가 더 크면 그 값을 선택한 요소에 대입하고 앞으로 이동하면서 이 작업을 반복한다. 그러다가 선택한 요소 값 이하의 요소를 만나면 그 보다 앞쪽은 검사할 필요가 없으므로 해당 위치에 선택한 요소 값을 대입한다.
  • 떨어져 있는 요소들이 서로 뒤바뀌지 않아 안정적인 알고리즘이다.
  • 시간 복잡도는 O(n^2)
  • 장점 : 정렬을 마쳤거나 정렬을 마친 상태에 가까우면 정렬 속도가 매우 빨라진다.
  • 단점 : 삽입할 위치가 멀리 떨어져 있으면 이동(대입)해야 하는 횟수가 많아진다.
1
2
3
4
5
6
7
8
9
10
11
//단순 삽입 정렬
static void insertionSort(int[] a, int n) {
    for (int i = 1; i < n; i++) {
        int j;
        int tmp = a[i];        //정렬되지 않은 부분의 첫 번째 요소
        for (j = i; j > 0 && a[j - 1> tmp; j--) {
            a[j] = a[j - 1];
        }
        a[j] = tmp;
    }
}
cs

'알고리즘' 카테고리의 다른 글

퀵 정렬(quick sort)  (0) 2019.12.28
셸 정렬(shell sort)  (0) 2019.12.28
단순 선택 정렬(straight selection sort)  (0) 2019.12.27
버블 정렬(bubble sort)  (0) 2019.12.27
8퀸 문제  (0) 2019.12.26