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

2021-07-24 12:48:53 字數 803 閱讀 3713

希爾排序又稱縮小增量排序,實質上是分組直接插入排序。為了方便理解,先不討論如何獲得合適的增量陣列和整個演算法的**。

1、修改直接插入排序的**,實現增量為gap的直接插入排序。

/** 將陣列從start到end中間隔為gap的子串行進行直接插入排序

*/private static void straightinsertsortwithgap(int nums,int start,int end,int gap),現在對它進行一次增量為3的分組插入。

順序\分組 ab

c1,3,8,52

,6,7,43

,9,2

,114,0

3、嚴格按照希爾排序思想,需要依次排序各組,即執行順序為a1、a2、a3、a4、b1、b2、b3、c1、c2、c3。

實現**為:

private static void sortgrouply(int nums,int start,int end,int gap){

int i,j,k,t;

for(i=0;i

private static void sortstraightly(int nums,int start,int end,int gap){

if(nums==null||nums.length<=end) throw new illegalargumentexception("輸入不合法");

int j,t;

for(int i=start+gap;i<=end;i++){

j=i-gap;

t=nums[i];

while(j>=start&&t

資料結構 演算法 希爾排序

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

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

希爾排序 1.希爾排序的產生 希爾排序是由科學家donald l.shell提出的,希爾排序基於插入排序,並新增了一些新的特性,從而大大提高插入排序的執行效率。2.插入排序的缺陷,多次移動 參見 插入排序 假如乙個很小的資料在靠右端的位置上。那麼要將該資料排序到正確的位置上,則所有的中間資料都需要向...

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

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