https://github.com/cuttingworms/Data-Structures-with-Python
- 쉘 정렬 (Shell Sort)
- 삽입 정렬을 이용하여 작은 값을 가진 원소들을 리스트의 앞부분으로 옮기며 큰 값을 가진 원소들이 리스트의 뒷부분에 자리 잡도록 만드는 과정을 반복하여 정렬하는 알고리즘
- 삽입 정렬에 전처리 과정을 추가한 것
- 전처리 과정은 삽입 정렬이 현재 원소를 앞부분에 삽입하기 위해 이웃하는 원소들끼리 비교하며 한 자리씩 이동하는 단점을 보완하기 위해 고안되었으며 각 단계에서 일정 간격으로 떨어진 원소들에 대해 삽입 정렬을 수행
- 간격이 h인 원소들끼리 정렬하는 것을 h-정렬(h-Sort)라고 함
- 대표적인 간격의 순서(h-Sequence)
Shell n/2, n/4, ... , 1 (나누기 2를 계속하여 1이 될 때까지의 순서) Hibbard 2^k - 1, 2^(k-1) -1, ... , 7, 3, 1 Knuth (3^k - 1)/2, ... , 13, 4, 1 Sedgewick ... , 109, 41, 19, 5, 1 Marcin Ciura 1750, 701, 301, 132, 57, 23, 10, 4, 1
- 수행 시간
- 쉘 정렬의 수행 시간은 간격을 어떻게 설정하느냐에 따라 달라짐
- Hibbard 간격을 사용하면 수행 시간이 O(n^1.5)
- Marcin Ciura 간격이 대체적으로 좋은 성능을 보임
- 쉘 정렬의 정확한 수행 시간을 측정하는 것은 아직 풀리지 않은 문제, 최적(Optimal) 간격을 찾고 나서야 쉘 정렬의 정확한 수행 시간을 측정할 수 있기 때문
- 일반적으로 쉘 정렬은 입력이 그리 크지 않은 경우에 매우 좋은 성능을 보임
'자료구조 (Data Structures) > 정렬, Sorting' 카테고리의 다른 글
[Sorting] 퀵 정렬, Quick Sort (0) | 2022.01.13 |
---|---|
[Sorting] 합병 정렬, Merge Sort (0) | 2022.01.13 |
[Sorting] 힙 정렬, Heap Sort (0) | 2022.01.12 |
[Sorting] 삽입 정렬, Insertion Sort (0) | 2022.01.12 |
[Sorting] 선택 정렬, Selection Sort (0) | 2022.01.12 |