μ Έ μ λ ¬(Shell Sort)
π© μ½μ μ λ ¬μ μ₯μ μ μ΄λ¦¬κ³ , λ¨μ μ 보μνμ¬ μ’ λ λΉ λ₯΄κ² μ λ ¬νλ μκ³ λ¦¬μ¦
μ½μ μ λ ¬μ 보μ
μ½μ μ λ ¬μ μ΄κΈ° 리μ€νΈκ° "κ±°μ 보μ"λμ΄ μμ κ²½μ° ν¨μ¨μ
μ λ ¬λμ§ μμμνμ λ°°μ΄μ λν΄ λ¨μνκ² μ½μ μ λ ¬μ μ μ©νλ κ²μ΄ μλλΌ
'4-μ λ ¬', '2-μ λ ¬'μ²λΌ μ‘°κΈμ΄λΌλ μ λ ¬μ΄ λ μνμ κ°κΉμ΄ λ°°μ΄λ‘ λ§λ λ€μ λ§μ§λ§ μ½μ μ λ ¬μ νλ κ²
μ λ ¬ν΄μΌ νλ νμλ λμ§λ§, μ 체μ μΌλ‘ μμ μ΄λ νμκ° μ€μ΄λ€μ΄ ν¨μ¨μ μΈ μ λ ¬μ ν μ μλ€.
π© μμ
1. μ λ ¬ν λ°°μ΄μ μμλ₯Ό κ·Έλ£ΉμΌλ‘ λλ κ° κ·Έλ£Ήλ³λ‘ μ½μ μ λ ¬ μν
2. κ·Έ κ·Έλ£Ήμ ν©μΉλ©΄μ μ λ ¬μ λ°λ³΅νμ¬ μμμ μ΄λ νμλ₯Ό μ€μΈλ€
3. μμ κ³Όμ μ κ·Έλ£Ήμ κ°μκ° 1μ΄ λ λκΉμ§ λ°λ³΅νλ€.
π© λλλ κ°κ²© k
κ°κ²© kμ μ΄κΉκ° : (λ°μ΄ν°μ κ°―μ) / 2
λ§€ νμ λ§λ€ kλ μ λ°μΌλ‘ λλλ€. νμ νμκ° λλλ‘ κ°μ μμ νλ€(μ§μμΈ κ²½μ° + 1)
kκ° 1μ΄ λ λκΉμ§ λ°λ³΅
'k-μ λ ¬'μ΄λΌ λΆλ¦ μ) 5-μ λ ¬

π© μ₯λ¨μ
(μ₯) μ°μμ μ΄μ§ μμ 리μ€νΈμ κ΅νμ΄ μΌμ΄λλ©΄ λ ν° κ±°λ¦¬λ₯Ό μ΄λ
(μ₯) κ΅νλλ μμλ€μ΄ μ½μ μ λ ¬λ³΄λ€ μ΅μ’ μμΉμ μμ κ°λ₯μ±μ΄ λ λμμ§λ€.
(λ¨) k κ°κ²©μ μλͺ» μ€μ νλ€λ©΄ μ±λ₯μ΄ κ΅μ₯ν μ μ’μμ§ μ μλ€.
π λ³΄ν΅ μ 체μμ h/2λ₯Ό νμ§λ§ μ΄λ³΄λ€ h/3 + 1μ΄ λ λΉ λ₯΄λ€.
π© μκ°λ³΅μ‘λ
O(n^1.5)
ShellSort(A[ ], n) {
int i, j, temp;
int gap = len / 2;
while (gap > 0) {
for (i = gap; i < len; i++) {
temp = arr[i];
j = i;
while (j >= gap && arr[j - gap] > temp) {
arr[j] = arr[j - gap];
j -= gap;
}
arr[j] = temp;
}
gap /= 2;
}
}