排序演算法之希爾排序

2021-10-10 23:38:51 字數 763 閱讀 8202

演算法描述第乙個突破o(n2)的排序演算法,是簡單插入排序演算法的改進版,它與插入排序的不同之處在於,它會優先比較距離較遠的元素。

演算法描述:

先將整個待排序的序列分割成多個子串行進行插入排序;

選擇乙個增量序列,對序列進行k趟排序;

每趟排序根據對應的增量ti將待排序的分割成若干長度為m的子串行,分別對各子表進行插入排序,當增量因子為1時,整個序列作為乙個表來處理,表長度即為整個序列的長度。

**實現:

public

class

shellsort

; system.out.

println

("排序前的陣列:");

for(

int s:a)

for(

int gap=a.length/

2;gap>

0;gap/=2)

a[k+gap]

=temp;}}

}}system.out.

println

("排序後的陣列:");

for(

int s:a)

}

希爾排序的複雜度和增量序列是相關的

這種序列並不是很好的增量序列,使用這個增量序列的時間複雜度(最壞情形)是o(n^2)

hibbard提出了另乙個增量序列,這種序列的時間複雜度(最壞情形)為o(n1.5)

sedgewick提出了幾種增量序列,其最壞情形執行時間為o(n^1.3),其中最好的乙個序列是

排序演算法之希爾排序

希爾排序實際上是一種分治思想的插入排序。插入排序不說了,不清楚看這裡 分治思想,對增量為dk,dk遞減,開始很多小序列,最後為乙個大序列 相對直接插入排序,在希爾排序中,只不過增量不是1,而是dk 較好的增量序列是2 k 1,2 k 1 1,7,3,1,這樣可使shell排序時間複雜度達到o n 1...

排序演算法之希爾排序

希爾排序 shell sort 又稱為縮小增量排序,輸入插入排序演算法,是對直接排序演算法的一種改進。本文介紹希爾排序演算法。對於插入排序演算法來說,如果原來的資料就是有序的,那麼資料就不需要移動,而插入排序演算法的效率主要消耗在資料的移動中。因此可知 如果資料的本身就是有序的或者本身基本有序,那麼...

排序演算法之希爾排序

希爾排序,突破了 通過交換相鄰元素進行排序的任何演算法平均需要 n 2 的二次時間限制 通過比較相距一定間隔的元素來工作。使用乙個增量序列 h1 1,h2,ht,在使用乙個 增量h的一趟排序後,對於每乙個i滿足pdata i pdata i h 即此時序列是h排序的 各趟 比較所用的距離逐漸減小,直...