0) 引論
希爾排序時donald shell於2023年發明的一種改進插入排序的排序演算法。對於插入排序我們知道,要想打破插入排序的時間界,那麼必須要交換向距離比較遠的元素。希爾排序通過引入增量序列,首先排序距離較遠的元素,大大縮小逆序的數量,進而提高了插入排序的執行效率。
1) 希爾排序
希爾排序利用乙個增量序列,h1,h2,...,ht,任何增量序列只需要滿足h1=1即可。在使用增量hk的排序中,只需要要滿足a[i]<=a[i+hk]即可。也就是說使距離為hk的資料是有序的。希爾排序利用的原理就是首先交換距離較遠的元素,減小逆序的數目。下面是乙個小例子。
關於希爾排序的乙個比較主要的問題就是增量序列的選擇問題。亦即是增量最大值ht,增量間距hk的選擇問題。乙個比較流行但是並不好的方法是:
希爾排序的增量序列的選擇不同,演算法的效率也會不一樣。
hibbard提出了一種增量序列1,3,7,...2^k-1.
2) 總結
希爾排序通過引入增量序列,優先交換距離遠的資料,減小逆序的個數,使排序時間縮短。
希爾排序簡單,相對於插入排序高效,即使對於比較大的資料集也能取得比較不錯的結果。
希爾排序(Shell Sort)
希爾排序 shell sort 又叫做縮小增量排序 diminishing increment sort 是一種很優秀的排序法,演算法本身不難理解,也很容易實現,而且它的速度很快。基本思想 先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分成d1個組。所有距離為dl的倍數的記錄放在同乙個組中...
希爾排序 shellsort
希爾排序 shellsort 又叫增量遞減 diminishing increment 排序,是由d.l.shell發明的,這個演算法是通過乙個逐漸減小的增量使乙個陣列逐漸趨近於有序從而達到排序的目的。假設有乙個陣列int data 16 首先將這個增量設為16 2 8,這樣就將這個陣列分成了8個子...
希爾排序(ShellSort)
希爾排序 shellsort cpp view plain copy include shellsort.h include print.h 希爾排序,分組進行插入排序,最後一步仍然是插入排序,但是因為之前的操作使逆序數減少,所以相對單純的插入排序效率高。void shellsort inta,in...