排序演算法之希爾排序

2022-05-08 15:42:12 字數 988 閱讀 8165

希爾排序實際上是一種分治思想的插入排序。

插入排序不說了,不清楚看這裡

分治思想,對增量為dk,dk遞減,開始很多小序列,最後為乙個大序列

相對直接插入排序,在希爾排序中,只不過增量不是1,而是dk

較好的增量序列是2^k-1,2^(k-1)-1,.....7,3,1,這樣可使shell排序時間複雜度達到o(n^1.5)(參考《希爾排序最佳增量序列研究》)

while((dlta+1)*2dlta=(dlta+1)*2-1;//計算出最大增量序列數

shellinsert(l,length,dlta);// 演算法是直接插入排序,只不過增量不是1,而是dlta

dlta=(dlta+1)/2-1;//增量遞減

——————————————**分界線———————————————————————————

//分治思想+插入排序,

//對增量為dk,dk遞減,開始很多小序列,最後為乙個大序列

//插入排序,只不過增量不是1,而是dk

//希爾排序實際上是一種分治思想的插入排序

#include#define length 10

#define dlength 3

void shellsort(int*,int);

void shellinsert(int*,int,int);

int main()

; int i;

printf("請分別輸入%d個整數:\n",length);

for(i=0;i=0&&l[j]>temp;j-=dlta)

l[j+dlta]=l[j];

l[j+dlta]=temp;

}}//希爾排序演算法

//時間複雜度約為o(n^1.5),在選擇其它增量序列的條件下,可至下限o(nlogn)

//希爾排序是一種使用分治法的插入排序

void shellsort(int*l,int length)

}

排序演算法之希爾排序

希爾排序實際上是一種分治思想的插入排序。插入排序不說了,不清楚看這裡 分治思想,對增量為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排序的 各趟 比較所用的距離逐漸減小,直...