希爾排序
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...