希爾排序(Shell Sort)

2021-06-02 06:21:23 字數 800 閱讀 6168

希爾排序(shell sort)又叫做縮小增量排序(diminishing increment sort),是一種很優秀的排序法,演算法本身不難理解,也很容易實現,而且它的速度很快。

基本思想:

先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分成d1個組。所有距離為dl的倍數的記錄放在同乙個組中。先在各組內進行直接插入排序;然後,取第二個增量d2該方法實質上是一種分組插入方法。

插入排序(insertion sort)的乙個重要的特點是,如果原始資料的大部分元素已經排序,那麼插入排序的速度很快(因為需要移動的元素很少)。從這個事實我們可以想到,如果原始資料只有很少元素,那麼排序的速度也很快。--希爾排序就是基於這兩點對插入排序作出了改進。

例如,有100個整數需要排序。

第一趟排序先把它分成50組,每組2個整數,分別排序。 

第二趟排序再把經過第一趟排序後的100個整數分成25組,每組4個整數,分別排序。 

第三趟排序再把前一次排序後的數分成12組,第組8個整數,分別排序。 

照這樣子分下去,最後一趟分成100組,每組乙個整數,這就相當於一次插入排序。 

由於開始時每組只有很少整數,所以排序很快。之後每組含有的整數越來越多,但是由於這些數也越來越有序,所以排序速度也很快。

private static void shellpass(int a) ;

shellpass(a);

system.out.println("排序後:");

for (int i = 0; i < a.length; i++){

system.out.print(a[i] + " ");

希爾排序 shellsort

希爾排序 shellsort 又叫增量遞減 diminishing increment 排序,是由d.l.shell發明的,這個演算法是通過乙個逐漸減小的增量使乙個陣列逐漸趨近於有序從而達到排序的目的。假設有乙個陣列int data 16 首先將這個增量設為16 2 8,這樣就將這個陣列分成了8個子...

希爾排序(ShellSort)

希爾排序 shellsort cpp view plain copy include shellsort.h include print.h 希爾排序,分組進行插入排序,最後一步仍然是插入排序,但是因為之前的操作使逆序數減少,所以相對單純的插入排序效率高。void shellsort inta,in...

希爾排序(Shellsort)

0 引論 希爾排序時donald shell於1959年發明的一種改進插入排序的排序演算法。對於插入排序我們知道,要想打破插入排序的時間界,那麼必須要交換向距離比較遠的元素。希爾排序通過引入增量序列,首先排序距離較遠的元素,大大縮小逆序的數量,進而提高了插入排序的執行效率。1 希爾排序 希爾排序利用...