資料結構與演算法(八)希爾排序

2021-07-31 09:05:19 字數 900 閱讀 9667

希爾排序

1. 希爾排序的產生

希爾排序是由科學家donald l.shell提出的,希爾排序基於插入排序,並新增了一些新的特性,從而大大提高插入排序的執行效率。

2. 插入排序的缺陷,多次移動(參見  插入排序)

假如乙個很小的資料在靠右端的位置上。那麼要將該資料排序到正確的位置上,則所有的中間資料都需要向右移動一位。

3. 希爾排序的優點

希爾排序通過加大插入排序中元素之間的間隔,並對這些間隔的元素進行插入排序,從而使得資料可以大幅的移動。當完成該間隔的排序後,希爾排序會減少資料的間隔再進行排序。依次進行下去。

4. 間隔的計算

間隔h的初始值為1,通過 h = 3*h+1 來迴圈計算,直到該間隔大於陣列的大小時停止。最大間隔為不大於陣列大小的最大值。

(對照下方程式: h

5. 間隔減小

可以通過公式 h = (h-1)/3 來計算。

希爾排序

/*

* 希爾排序

*/public class shellsort

arr[j]=tmp;

}//減小間隔

h=(h-1)/3;

} }}

測試:

public class testshellsort 

system.out.print("]");

system.out.println();

shellsort.sort(arr);

system.out.print("[");

for(long num : arr)

system.out.print("]");

system.out.println();

}}

資料結構與演算法 希爾排序

希爾排序又稱縮小增量排序,實質上是分組直接插入排序。為了方便理解,先不討論如何獲得合適的增量陣列和整個演算法的 1 修改直接插入排序的 實現增量為gap的直接插入排序。將陣列從start到end中間隔為gap的子串行進行直接插入排序 private static void straightinser...

資料結構 演算法 希爾排序

希爾排序過程 希爾排序的基本思想是 將陣列列在乙個表中並對列分別進行插入排序,重複這過程,不過每次用更長的列 步長更長了,列數更少了 來進行。最後整個表就只有一列了。將陣列轉換至表是為了更好地理解這演算法,演算法本身還是使用陣列進行排序。def shell sort alist 希爾排序 n len...

資料結構與演算法 九 希爾排序

演算法思想 希爾排序是基於插入排序的以下兩點性質而提出改進方法的 先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分組。所有距離為d1的倍數的記錄放在同乙個組中。先在各組內進行直接插入排序 然後,取第二個增量d2key a main.c include include include sor...