希爾排序
這方法太噁心了,可以和冒泡、直插、選擇進行組合,就是希爾排序裡要內嵌其他排序,可是再希爾排序裡實現其他排序,要進行一些腦筋急轉彎的改變,所以剛學的時候肝了一天才弄明白;
大體說一說思路吧,以內嵌氣泡排序為例
加入這裡有乙個無序數字串:9876543210
我們要給他分組,一般會把總長除以二作為第一次的組數,10\2 = 5
所以我們把他分為如下圖所示的兩個一組共五組:
五組分別是(9 4)(8 3)(7 2)(6 1)(5 0)
對這五組分別進行氣泡排序
我們可以設定這樣乙個迭代來執行五次氣泡排序:
for(i = 1 , i < gap , i++)接下裡,gap/2=2
又分為如下的兩組:
這兩組分別為(9 7 5 3 1)(8 6 4 2 0)
同樣我們用上面的迭代,對兩組分別做氣泡排序
因為分組後,每個子串行資料之間都隔著gap個距離,所以內嵌的排序要做出改動(以冒泡為例)
以在分為兩組的情況下舉例:
兩個元素兩個元素的比較,比如這一組第乙個元素在陣列中下標為j,那麼這一組中第二個元素在陣列中的下標為j+gap
氣泡排序結束時要保證這一組的元素是有序的,所以只有在對這一組元素進行氣泡排序時元素之間都不進行交換了就可以證明這組數有序了
就可以結束這一組的氣泡排序,進入下一組的氣泡排序
執行結果:
原始碼如下:
#includetypedef int keytype;//希爾排序
void shellsort(keytype k , int n)
}} while (flag==1); }}
}#define max 100
int main()
if (c == '\n')
//氣泡排序
shellsort(k,n-1);
printf("這串數字從小到大為:");
for (size_t i = 1; i <= n-1; i++)
return 0;
}
資料結構 C語言實現希爾排序
一 希爾排序簡介 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序 增量足夠小 時,再對全體元素進行一次直接插入排序。因為直接插入排序在元素基本有序的情況下 接近最好情況 效率是很高的,二 c語言 實...
資料結構 C語言實現排序演算法 希爾排序
希爾排序 又稱 縮小增量排序 基本思想 先將待排序列分為若干個子串行分別進行直接插入排序,待整個序列 基本有序時 再對整個序列進行一次直接插入排序。圖例 由圖例可以看出 希爾排序是通過不斷的縮小增量來實現排序的方法。c 實現 void shellsort int arr,int left,int r...
希爾排序 C語言實現
希爾排序 shell s sort 又稱 縮小增量排序 diminishing increment sort 是插入排序的一種,因d.l.shell 於1959 年提出而得名。直接插人排序,當待排序的記錄個數較少且待排序序列的關鍵字基本有序時,效率較高。希爾排序基於以上兩點,從 減少記錄個數 和 序...