希爾排序 C語言

2021-10-09 04:27:00 字數 628 閱讀 2529

希爾排序(shell』s sort)是插入排序的一種又稱「縮小增量排序」(diminishing increment sort),是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。

基本思路是先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分組。所有距離為d1的倍數的記錄放在同乙個組中。先在各組內進行直接插入排序;然後,取第二個增量d2,直至增量為1;

利用c語言寫的希爾排序的演算法如下:

平均時間複雜度為o(n**d),最壞時間複雜度為o(nn),穩定性為不穩定;

#include

void

shell_sort

(int a,

int n)

;int main (

void);

shell_sort

(arr,21)

;for

(i =

0; i<

21; i++

)return0;

}void

shell_sort

(int a,

int n)

a[j]

= tmp;

//此時j就是tmp位置 }}

}

C語言 希爾排序

比較相隔較遠距離 稱為 增量 的數,使得數移動時能跨過多個元素,則進行一次比較就可能消除多個元素交換。d.l.shell於1959年在以他名字命名的 排序演算法中實現了這一思想。演算法先將要排序的一組數按某個 增量d分成若干組,每組中記錄的下標相差d.對每組中全部元素進行排序,然後再用乙個較小的增量...

希爾排序(c語言)

希爾排序 取乙個小於n的整數gap gap又叫做步長 通過把所有距離為gap或者gap的倍數的資料放在乙個組裡,對每乙個組進行插入排序,當每個組有序時,這整個序列就接近有序,然後減小gap,繼續上面的操作,gap越小時,預排序完畢越接近有序,當gap等於1時,預排序就相當於直接插入排序。希爾排序分為...

c語言希爾排序

include 陣列的輸出 void output array int data,int n 交換兩個數 void swap int a,int b 往資料裡面插入資料 void insertion sort int data,int n,int increment 希爾排序 void shells...