希爾排序是直接插入排序的公升級版,實質上是一種分組的插入排序,根據增量進行分組然後進行插入排序,克服插入排序的效率低的劣勢,但是它依然是不穩定的排序方式,希爾演算法在最優和最壞情況下時間複雜度相差不多。
下面根據乙個例子進行解釋:
假設資料集合為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,那麼在這整個過程中都無需進行任何的插入動作,只需要將每次抓到的牌放在最後即可。假設現在手上已經抓到的牌的順序中逆序比較少,則抓牌的過程中插入操作就越少。因此,對於基本有序的序列排序,直接插入排序的效能是比較好的。這裡的基本有序...