天天看點

Java程式設計:排序算法——希爾排序

簡單插入排序存在的問題

我們看簡單的插入排序可能存在的問題.

數組 arr = {2,3,4,5,6,1} 這時需要插入的數 1(最小), 這樣的過程是:

{2,3,4,5,6,6}

{2,3,4,5,5,6}

{2,3,4,4,5,6}

{2,3,3,4,5,6}

{2,2,3,4,5,6}

{1,2,3,4,5,6}

結論: 當需要插入的數是較小的數時,後移的次數明顯增多,對效率有影響.

希爾排序法介紹

希爾排序是希爾(Donald Shell)于1959年提出的一種排序算法。希爾排序也是一種插入排序,它是簡單插入排序經過改進之後的一個更高效的版本,也稱為縮小增量排序。

希爾排序法基本思想

希爾排序是把記錄按下标的一定增量分組,對每組使用直接插入排序算法排序;随着增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個檔案恰被分成一組,算法便終止

希爾排序法示意圖

Java程式設計:排序算法——希爾排序
Java程式設計:排序算法——希爾排序

希爾排序法應用執行個體:

有一群小牛, 考試成績分别是 {8,9,1,7,2,3,5,4,6,0} 請從小到大排序. 請分别使用

Java程式設計:排序算法——希爾排序

希爾排序時, 對有序序列在插入時采用交換法, 并測試排序速度.

希爾排序時, 對有序序列在插入時采用移動法, 并測試排序速度

代碼