資料結構之希爾排序(插入排序)

2021-08-14 05:20:57 字數 984 閱讀 9089

希爾排序(shell`s sort)又稱「縮小增量排序」(diminishing increment sort),是插入排序的一種,因d.l.shell於2023年提出而得名。

希爾排序的誕生是由於插入排序在處理大規模陣列的時候會遇到需要移動太多元素的問題。希爾排序的思想是將乙個大的陣列「分而治之」,劃分為若干個小的陣列,然後分別對劃分出來的陣列進行插入排序。

希爾排序是基於插入排序的以下兩點性質而提出改進方法的:

插入排序在對幾乎已經排好序的資料操作時, 效率高, 即可以達到線性排序的效率

但插入排序一般來說是低效的, 因為插入排序每次只能將資料移動一位

效果示意圖:

步驟

取增量,一般取陣列長度/2

按增量取得乙個子數列,對子數列按插入排序的方式處理

將增量遞減,重複1,2步驟

直至增量為為0,數列已經排好序

例項

原始資料:

2 5 1 6 1

取5/2=2作為增量,對[2 1 1]進行插入排序,得到

1 4 1 5 2

增量遞減2/2=1,對[1 4 1 5 2]進行插入排序,得到

1 1 2 4 5

增量遞減為0,排序結束。

如果不是很懂可以看一下動畫

void shellinsert(sqlist &l,int dk)

}}void shellsort(sqlist &l,int dt,int t)

資料結構 插入排序 希爾排序

一 插入排序 1 介紹 插入排序 insertion sort 的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,通常採用in place排序 即只需用到o 1 的額外空間的排序 因而在從後向前掃...

資料結構 插入排序 希爾排序

先用簡單的一句話概括,每次用陣列中乙個數字,與他之前的所有資料進行比較,如果滿足條件則更換順序。光這麼說,感覺還是有些晦澀難懂,那我們來舉個例子看看吧,畢竟要學以致用呀,奧利給。1 假設我們現在有乙個陣列 2 那麼我們需要先拿出最前面的兩位 1 進行比較,並且是用最有一位向前進行比較,3 5,那麼交...

資料結構例程 插入排序之希爾排序

本文是 資料結構基礎系列 9 排序 中第3課時 插入排序之希爾排序 的例程。1.希爾排序 include define maxsize 20 typedef int keytype 定義關鍵字型別 typedef char infotype 10 typedef struct 記錄型別 rectyp...