經典排序演算法(四)希爾排序 C

2021-07-08 10:33:11 字數 1202 閱讀 8092

希爾排序是直接插入排序的公升級版,實質上是一種分組的插入排序,根據增量進行分組然後進行插入排序,克服插入排序的效率低的劣勢,但是它依然是不穩定的排序方式,希爾演算法在最優和最壞情況下時間複雜度相差不多。

下面根據乙個例子進行解釋:

假設資料集合為da

ta=[

3,2,

5,7,

1,8,

4,6]

增量選取為4,2,1

當增量為4時:

從第一點開始,每次增加4,確定為一組進行插入比較,即分成(3,1),(2,8),(5,4),(7,6)四組。

當增量為2時 :

當增量為1時,就挺熟悉了,這就是插入排序了

實現1是我自己實現的希爾排序,比較麻煩,考慮邊界問題,實現二是根據別人思想寫的,比較簡便。(學習過程中一定要有自己實現**的過程不能一味的抄寫別人的,根據別人的改進這是乙個過程)

實現1:

#include 

using

namespace

std;

int main()

; int n = 8;

for (int delta = n/2; delta>0; delta/=2) //設定間隔delta}}

}}for (int i = 0; i < 8; i++)

cout

<< data[i] << " ";

cout

<< endl;

return

0;}

實現2:

#include 

using

namespace

std;

int main111()

; int i, j, gap;

int n = 8;

for (gap = n / 2; gap > 0; gap /= 2)}}

}for(int i=0;i<8;i++)

cout

<

cout

0;}

經典排序演算法 希爾排序

注 本文參考 在講解希爾排序之前,我們有必要先回頭看一下插入排序的問題。插入排序不管陣列分布時怎麼樣的,都是一步步的對元素進行比較,移動,插入。比如 5,4,3,2,1,0 這種倒序序列,陣列末端的0要回到首位很費勁,比較和移動元素均需n 1次。這時就引出了希爾排序。希爾排序是希爾 donald s...

排序演算法 四 希爾排序

希爾排序是插入排序的一種優化實現,比直接插入排序演算法更高效。也是第一批演算法時間複雜度突破o n 2 的演算法之一。因 d.l.shell 於 1959 年提出而得名。希爾排序是把集合資料按下標的一定增量分組,對每組使用直接插入排序演算法排序 隨著增量的減少,集合資料越來越接近整體有序。當增量減至...

經典排序演算法之希爾排序

前面的直接插入演算法,以抓牌為例,假設手氣比較好,抓牌的順序是從a直到k,那麼在這整個過程中都無需進行任何的插入動作,只需要將每次抓到的牌放在最後即可。假設現在手上已經抓到的牌的順序中逆序比較少,則抓牌的過程中插入操作就越少。因此,對於基本有序的序列排序,直接插入排序的效能是比較好的。這裡的基本有序...