希爾排序(shell's sort)又稱縮小增量排序,類屬於插入排序。考慮到直接插入排序得一下特點:
(1)在待排序數基本有序情況下排序效率大大提高;
(2)在n很小時,其排序效率也很高。
基於以上考慮,對直接插入排序進行改進,並得出希爾排序。其基本思想為:先將整個待排序記錄序列分割成若干子串行分別進行直接插入排序,待整個序列中的記錄「基本有序時」,再對全體記錄進行一次插入排序。
這裡的子串行是通過乙個增量得到的,每一次賦予不同的增量,則得到不同的子串行組(分別對子序列進行直接插入排序就稱作一次希爾插入排序,注意,實際**中並不是依次排好乙個自序列之後再排下乙個這樣效率低,而是依次掃瞄每乙個子串行的元素即同時對各子串行排序)。這樣將該增量逐漸遞減為1便最終得到的子串行組就是其本身。
此時,問題的關鍵就在於增量序列delta[t]了,其個數和值都將影響排序效果。已有的結論為:當delta[k]=2t-k+1-1,1≤k≤t≤log2(n+1)時其時間複雜度為o(n3/2).另外增量序列還有其他各種取法。
另外,從排序過程可知,希爾排序是一種不穩定的排序演算法。
對此,原始碼如下:
#include #include#include
#include
#include
#include
using
namespace
std;
template
void shellinsert(t &l,int dk, int
length)
//對順序表做一趟希爾排序,dk是增量值,length是待排序陣列的元素個數
}template
void shellsort(t &l, int dlta, int t,int
length)
}int
main()
cout
生成待排序陣列
cout
<< endl
); ofstream outs;
outs.open(
"shellsort.txt");
for (i = 1; ii)
cout
}
插入排序演算法 希爾排序
插入排序演算法 希爾排序 希爾排序思想是將陣列每次分成不同的陣列同時進行排序,劃分的方式是設定增量值,即h length 2,h 2 與直接排序最大的不同就是比較的陣列值下標間隔不同。希爾排序在資料量龐大的時候進行排序效率高,時間短。觀察下圖,根據以上思想,進行移動。如下 include void ...
排序演算法 插入排序 希爾排序
1 相鄰資料之間相比較。先是1,0 然後2,1 1,0 以此類推 總結 大for從1 n 小for從i 0,之後判斷交換即可 public void charusort for int i 1 i a.length i 2 希爾排序是插入排序特殊化,他不再比相鄰資料,而是可以比較類似1,4,13.的...
插入排序 希爾插入排序
本文借鑑於lsgo實驗室創始人馬老師 演算法 希爾插入排序 delta len nums 2 while delta 0 shell delta,nums delta delta 2return nums defshell delta,key for i in range delta,len key...