排序演算法 希爾排序原理及Java實現

2021-07-11 11:23:06 字數 1095 閱讀 4730

希爾排序也成為「縮小增量排序」,其基本原理是,現將待排序的陣列元素分成多個子串行,使得每個子串行的元素個數相對較少,然後對各個子串行分別進行直接插入排序,待整個待排序列「基本有序」後,最後在對所有元素進行一次直接插入排序。因此,我們要採用跳躍分割的策略:將相距某個「增量」的記錄組成乙個子串行,這樣才能保證在子串行內分別進行直接插入排序後得到的結果是基本有序而不是區域性有序。希爾排序是對直接插入排序演算法的優化和公升級。

所謂的基本有序,就是小的關鍵字基本在前面,大的基本在後面,不大不小的基本在中間,例如{2,1,3,6,4,7,5,8,9,}就可以稱為基本有序了。但像{1,5,9,3,7,8,2,4,6}這樣,9在第三位,2在倒數第三位就談不上基本有序。

希爾排序的關鍵並不是隨便分組後各自排序,而是將相隔某個「增量」的記錄組成乙個子串行,實現跳躍式移動,使得排序的效率提高。需要注意的是,增量序列的最後乙個增量值必須等於1才行。另外,由於記錄是跳躍式的移動,希爾排序並不是一種穩定的排序演算法。

希爾排序最好時間複雜度和平均時間複雜度都是

以陣列為例,步長序列為

初始化關鍵字: [26, 53, 67, 48, 57, 13, 48, 32, 60, 50 ]

最後的排序結果:

13 26 32 48 48 50 53 57 60 67

public

static

void

shellsortsmalltobig(int data) else

}data[j + increment] = temp;

}for (int i = 0; i < data.length; i++)

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

public

static

void

main(string args) ;

shellsortsmalltobig(data);

system.out.println(arrays.tostring(data));

}

Java排序演算法 希爾排序

一.思想 是插入排序法的一種改進。先取乙個小於n的整數d1作為第乙個增量,所有距離為d1倍數的整數作為乙個組,然後對組內 進行插入排序,然後再取第二個增量d2 二.例子 比如2,5,3,1,4,6.當d 3的時候,所有距離為3的整數作為乙個分組,那麼2,1作為乙個分組,5,4作為乙個分組,3,6作為...

排序演算法之希爾排序及Java實現

選擇排序 直接選擇排序,堆排序 交換排序 氣泡排序,快速排序 插入排序 直接插入排序,希爾排序 歸併排序 桶式排序 基數排序 希爾排序也是一種插入排序,它是簡單插入排序經過改進之後的乙個更高效的版本,也稱為縮小增量排序。它的主要思想是將整個序列分成多個子串行,之後依次對每個子串行進行直接插入排序,經...

java演算法 希爾排序

int num new int int h 13 while h 0 num j thisnum h h 1 3 希爾排序實際上是一種分組插入排序,屬於插入排序的一種或者高階版,在分組排序過程中把陣列排列成 基本有序 的陣列,當整個資料為乙個陣列時 h 1 執行一次插入排序,此時資料為 基本有序 陣...