一、基本思想
希爾排序是衝破2次時間界的算法之一,它通過比較相距一定間隔的元素來工作,各趟比較所用的距離隨着算法的進行而減小,直到僅比較相鄰元素的最後一趟爲止,鑑於此,希爾排序也叫做 縮小增量排序。
二、希爾排序流程圖示
算法僞代碼就不復制粘貼了,一是因爲網上的資源較多,二是不夠直觀。下圖展示了在只有8個整數的數組上執行希爾排序的每一趟的過程。
左半部分使用希爾增量序列對數組排序,右圖使用Hibbard增量序列對數組排序,其中,
希爾增量序列的形式爲:
Hibbard增量序列形式爲:
箭頭旁邊的數字表示每趟排序後執行的賦值次數,因此,Hibbard增量序列優於希爾增量序列。
三、思考與總結
通過查閱相關資料,總結一些個人的思考如下:
- 每一趟排序都是由在一個或幾個沒有交集的子數組上執行的插入排序構成(圖中每一趟排序之前不同顏色的元素屬於同一個子數組);
- 最後一趟排序是在整個數組上執行了一次插入排序,所以算法是正確的;
- 排序的性能主要依賴增量序列的選擇;
- 如果數組基本有序,排序時間可能會減少;
- 對於像Sedgewick提出的增量序列,其性能甚至優於堆排序;
- 雖然插入排序是穩定的,但由多次插入排序過程組成的希爾排序是不穩定的;
- 隨着增量的減小,各趟排序的給人的跳躍感逐漸減小,逆序對逐漸減少,直觀上減少了後面各趟排序的執行時間;
從實踐中,希爾排序對於適度的大量輸入數據是可以接受的,因爲基於Sedgewick提出的增量序列的希爾排序最壞情形可以達到,因此對於數以萬計的數據進行排序還是非常高效的。