### **希爾排序算法思想**
把記錄按下標的一定增量分組,對每組使用*直接插入排序算法排序*;隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個文件恰被分成一組,算法便終止。
> 希爾排序算法過程:
>
> 先取一個正整數gap<n(gap:步長),把所有序號相隔gap的數組元素放一組,組內進行直接插入排序;然后取gap(1)<gap,重復上述分組和排序操作;直至gap(i)=1,即所有記錄放進一個組中排序為止。
* * *
例如數組a\[49, 38, 65, 97, 26, 13, 27, 49, 55, 4\]
第1次 步長 gap = 10 / 2 = 5
分成了五組(49, 13) (38, 27) (65, 49) (97, 55) (26, 4),
每組排序后變成了(13, 49) (27, 38) (49, 65) (55, 97) (4, 26)。
第1次排序結果:13 27 49 55 4 49 38 65 97 26
第2次 步長 gap = 5 / 2 = 2
分成了2組(13,49,4,38,97) (27,55,49,65,26)
每組排序后變成了(4,13,38,49,97) (26,27,49,55,65)
第2次排序結果:4 26 13 27 38 49 49 55 97 65
第3次 步長 gap = 2 / 2 = 1
分為一組,直接插入排序后,數組有序。
* * *
希爾排序的時間復雜度與增量序列的選取有關,例如希爾增量時間復雜度為O(n2),而Hibbard增量的希爾排序的時間復雜度為O(n^(3/2)),希爾排序時間復雜度的下界是n\*log2n,希爾排序時間復雜度O(Nlog2N),空間復雜度O(1)。希爾排序不是穩定排序算法。