希爾排序 shellsort

2021-04-06 23:43:48 字數 921 閱讀 6961

希爾排序(shellsort)又叫增量遞減(diminishing increment)排序,是由d.l. shell發明的,這個演算法是通過乙個逐漸減小的增量使乙個陣列逐漸趨近於有序從而達到排序的目的。

假設有乙個陣列int data[16] = 。 首先將這個增量設為16 / 2 = 8, 這樣就將這個陣列分成了8個子陣列,它們的索引是0, 8    1, 9   2, 10等等 。對這些子陣列進行排序。然後再使增量為8 / 2 = 4,這樣就將原陣列分成了4個子陣列,它們的索引分別是0, 4, 8, 12    1, 5, 9, 13等等。再對這四組數進行排序,直到增量為1。

以上所描述的增量遞減只是一種方法,這種方法並不是最有效率的。如f(n) = 3 * f(n - 1) + 1  f(1) = 1   (..., 121, 40, 13,  4, 1)就比上面的取增量的方法好。這種方法的時間複雜度是

o(n ^1.5)。

演算法如下

#include

void output_array(int data, int n)

void swap(int *a, int *b)

void insertion_sort(int data, int n, int increment)

void shellsort(int data, int n)

int main()

;output_array(data, 12);

shellsort(data, 12);

output_array(data, 12);

return 0;

}其它內部排序

氣泡排序(bubble sort)

插入排序(insertion sort)

選擇排序(selection sort)

快速排序(quicksort)

歸併排序(merge sort)

希爾排序(Shell Sort)

希爾排序 shell sort 又叫做縮小增量排序 diminishing increment sort 是一種很優秀的排序法,演算法本身不難理解,也很容易實現,而且它的速度很快。基本思想 先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分成d1個組。所有距離為dl的倍數的記錄放在同乙個組中...

希爾排序(ShellSort)

希爾排序 shellsort cpp view plain copy include shellsort.h include print.h 希爾排序,分組進行插入排序,最後一步仍然是插入排序,但是因為之前的操作使逆序數減少,所以相對單純的插入排序效率高。void shellsort inta,in...

希爾排序(Shellsort)

0 引論 希爾排序時donald shell於1959年發明的一種改進插入排序的排序演算法。對於插入排序我們知道,要想打破插入排序的時間界,那麼必須要交換向距離比較遠的元素。希爾排序通過引入增量序列,首先排序距離較遠的元素,大大縮小逆序的數量,進而提高了插入排序的執行效率。1 希爾排序 希爾排序利用...