插入排序的改進演算法 希爾排序

2022-05-30 04:09:12 字數 1161 閱讀 6348

希爾排序(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...