希爾排序:又稱"縮小增量排序"。基本思想:先將待排序列分為若干個子串行分別進行直接插入排序,待整個序列「基本有序時」,再對整個序列進行一次直接插入排序。
圖例:
由圖例可以看出:希爾排序是通過不斷的縮小增量來實現排序的方法。
c**實現:
void
shellsort
(int
*arr,
int left,
int right)
arr[end + dk]
= tmp;}}
}}
增量的選取:增量有許多種取法,但應使增量序列中沒有除1之外的公因子,並且最後乙個增量值必須為1。
目前為止並沒有一種最好的增量序列。
希爾排序特性總結:
時間複雜度:o(n^1.3) ~ o(n^2)
空間複雜度:o(1)
穩定性:不穩定
是對直接插入排序的優化
增量》1時,都是預排序,讓資料接近有序,增量=1時,此時資料已經基本上接近有序。
資料結構 C語言實現希爾排序
一 希爾排序簡介 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序 增量足夠小 時,再對全體元素進行一次直接插入排序。因為直接插入排序在元素基本有序的情況下 接近最好情況 效率是很高的,二 c語言 實...
資料結構C語言實現 希爾排序
希爾排序 這方法太噁心了,可以和冒泡 直插 選擇進行組合,就是希爾排序裡要內嵌其他排序,可是再希爾排序裡實現其他排序,要進行一些腦筋急轉彎的改變,所以剛學的時候肝了一天才弄明白 大體說一說思路吧,以內嵌氣泡排序為例 加入這裡有乙個無序數字串 9876543210 我們要給他分組,一般會把總長除以二作...
資料結構 C語言實現排序演算法 堆排序
堆排序 利用堆這種資料結構所設計的一種排序演算法。大堆 根節點值大於子節點的值,對應為公升序序列。小堆 根節點值小於子節點的值,對應為降序序列。堆排序實現的兩個步驟 建立堆堆排序 下述例子是進行大堆建立 建立大堆 圖例 建立步驟 尋找最後乙個分支的根節點 記為pos pos挨個減小,對每個分支,都進...