資料結構 C語言實現排序演算法 希爾排序

2021-10-24 23:18:17 字數 670 閱讀 4972

希爾排序:又稱"縮小增量排序"。基本思想:先將待排序列分為若干個子串行分別進行直接插入排序,待整個序列「基本有序時」,再對整個序列進行一次直接插入排序。

圖例:

由圖例可以看出:希爾排序是通過不斷的縮小增量來實現排序的方法。

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挨個減小,對每個分支,都進...