排序演算法之希爾排序 java實現

2021-07-30 13:22:44 字數 1299 閱讀 4917

希爾排序:在直接插入排序的基礎上進行的優化,直接插入排序在n值小的時候效率比較高,在n很大的時候如果待排序序列基本有序,效率依然很高,時間效率可以提公升為o(n)。希爾排序也稱之為縮小增量排序。

1.先選取乙個小於n的整數d(步長),然後按照步長d將待排序序列分為d組,從第乙個記錄開始間隔為d的為乙個組。然後對各組內進行直接插入排序,一趟過後,間隔為d的序列有序,隨著有序性的改善,減少步長d重複進行 。直到d=1使得間隔為1的記錄有序,也就達到了整體有序

1.我們有序列 18、 24、 12 、15 、1 、27、 17 、19。我們以步長為序列長度除以2作為第一次的步長。以後每次都在原有的步長基礎上除以2取整。直到步長為1後進行直接插入排序為止。

如上圖所示,我們把序列根據步長8/2=4,將序列分成四組分別為:

[1,18]、[24,27]、[12,17]、[15,19]。

然後對各組進行直接插入排序得到最後的結果:

1、24、12、15、18、27、17、19
2.繼續縮減步長,在上一步的結果序列1、24、12、15、18、27、17、19基礎上使得步長為上一步步長除以2,即步長為4/2=2重複第一步如下圖所示。

根據步長分為兩組,[1,12,17,18]、[15,19,24,27]然後分別執行直接插入排序獲得結果:

1、15、12、19、17、24、18、27
3.我們已經看到序列逐步成為有序的過程,知道最後步長為1,如當前例項。執行到第三步步長為2/2=1,所以進行最後一步的直接插入排序,序列就是有序序列了。

得到最終序列:

1、12、15、17、18、19、24、27
/**

* 希爾排序

**@param num

*/public

static

void

shellsort(int num) else

}num[k+step]=temp;}}

if (step == 1) }}

注:網路上有些希爾排序寫的稍微有點問題,把希爾排序裡面的直接插入寫成了冒泡了。

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

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

Java排序演算法之希爾排序

希爾排序 shell sort 又稱為 縮小增量排序 是1959年由d.l.shell提出來的。它也是一種屬於插入排序類的排序方法,是一種對直接插入排序的改進,但在時間效率上卻有較大的改進。希爾排序的基本思想是 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入...

JAVA排序演算法之希爾排序

本章內容對希爾德原理及特點並沒有做太多敘述,主要目的是對希爾排序 進行 解希爾排序內容簡介希爾排序是插入排序的一種,也成縮小增量排序,是直接插入排序演算法的 一種更高效的改進版本 希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入演算法排序,每組包含的元素越來越多,當增量減至1.整個陣列恰被分...