希爾排序和氣泡排序有點相似,但是不同的是希爾排序使用乙個序列h1,h2.........hi,叫做增量序列。在使用增量hk排序後,所有相隔hk的元素都被排序。希爾排序衝破二次時間屏障的第一批演算法之一。它有乙個重要性質:hk
排序的檔案(此後將是
hk-1
排序)將保持它的
hk排序性,這樣各趟排序結果就不會打亂前面的排序。希爾排序的效能在實踐中完全可以接受,即使是對於計算數以萬計的資料長度
仍是如此,程式設計的簡單特點使得它成為對適度的大量輸入資料經常選用的演算法。
增量序列的一種流行(但是不好)的選擇是使用shell建議的序列:h1=n/2和hk+1=hk/2。下面是對這種增量序列的希爾排序:
void shellsort(int a,int length)
{ int i,j,increment,temp;
for(increment=length/2;increment>0;increment/=2)
{ for(i=increment;i=increment&&temp
排序演算法之希爾排序(C語言實現)
希爾排序也叫縮小增量排序,它其實是直接插入排序的一種改進版本,實質是一種分組插入方法 基本思想 演算法先將要排序的一組數按某個增量 d d減到1時,整個要排序的數被分成一組,排序完成。一般的初次取序列的一半為增量 以後每次減半,直到增量為1。基本步驟 以如下8個記錄為例,來看一下排序的過程 40,3...
希爾排序 C語言實現
希爾排序 shell s sort 又稱 縮小增量排序 diminishing increment sort 是插入排序的一種,因d.l.shell 於1959 年提出而得名。直接插人排序,當待排序的記錄個數較少且待排序序列的關鍵字基本有序時,效率較高。希爾排序基於以上兩點,從 減少記錄個數 和 序...
C語言實現插入排序 希爾排序演算法
希爾排序演算法 void shellsort int arr,int len 插入排序 希爾排序 不穩定,空間複雜度為o 1 最壞時間複雜度為o n 2 include include 希爾排序演算法 void shellsort int arr,int len int main int len s...