排序 希爾排序

2021-08-19 07:22:30 字數 922 閱讀 2006

希爾排序是插入排序中的乙個分支,但是較簡單插入排序又有較大的改進,這使得它成為了歷史上第一批突破二次時間屏障的排序演算法之一哦。它是通過比較一定間隔的元素來工作的。因此希爾排序又稱為縮小增量排序。

直接插入排序對於原始資料基本有序的情況下,效率較高。在此的基礎上。我們可以想辦法,使資料基本有序,然後利用直接插入排序的特長完成排序。

對於使資料基本有序的方法可以進行粗排,那又怎麼進行粗排呢?希爾排序的方法是對於資料進行分組。然後再對於每個組的資料進行簡單排序。但是值得注意的是:並不是把乙個分組中的資料全部排序完畢,再排序第二個分組的,而是首先將所有分組的第乙個元素排完,再對所有的分組的第二個元素排序,依次類推。

其實一次粗排肯定不能完成排序,那就要不斷的減小分組間隔再進行粗排。這樣迴圈,直到分組間隔減小到1時,最後進行一次直接插入排序就可以完成排序了。

演算法描述:1>選擇乙個物理位置的間隔(gap)的序列(實現中常將gap遞減)       2>按間隔序列個數k,對序列進行k次排序   3>每次排序,根據對應的間隔gap,將待排序列分成若干個組,分別對各組進行插入排序。當最終間隔gap為1,時,排序完畢。

下面是用c語言實現的希爾排序:

#include void print (int a,int n){     //定義乙個輸出函式 

int i;

for(i=0;i0;gap/=2)               //每次改變每組中元素的物理位置間隔 

for(i=gap;i=0&&x下面是程式執行結果:

希爾排序的效率分析很複雜(效率並不等同時間複雜度),主要取決於分組間隔的選擇。但時間複雜度是o(n*log 2  n),並且希爾排序是乙個不穩定的排序演算法。

排序 希爾排序

希爾排序 shell sort 又稱為縮小增量排序,輸入插入排序演算法,是對直接排序演算法的一種改進。本文介紹希爾排序演算法。對於插入排序演算法來說,如果原來的資料就是有序的,那麼資料就不需要移動,而插入排序演算法的效率主要消耗在資料的移動中。因此可知 如果資料的本身就是有序的或者本身基本有序,那麼...

排序 希爾排序

縮小增量排序 待排序列按關鍵字基本有序時,直接插入排序的效率很高 希爾排序思想 將整個待排記錄分割為若干子串行分別進行直接插入排序,待整個序列中的記錄基本有序時,再對全體記錄進行一次直接插入排序,就可以完成整個排序工作 增量序列中的值沒有除1以外的公因子,且最後乙個增量必須等於1 子串行的構成不是逐...

排序 希爾排序

希爾排序又稱為 縮小增量排序 是由希爾在1959年提出的。希爾排序是對插入排序的一種改進,在效率上較直接插入,冒泡,選擇排序方法有較大改進。基本思想 設定乙個元素間隔增量gap,將參加排序的序列按這個間隔數gap從第1個元素開始依次分成若干個子串行。例如最開始gap 3,下面的序列可這樣劃分 原序列...