排序 2 希爾排序

2021-08-14 23:23:13 字數 743 閱讀 1087

我們來談一談希爾排序:

希爾排序和直接插入排序一樣屬於插入排序,但是由於分組的存在,相等的元素可能分在不同組,

導致他們的次序可能發生變化,所以它是不穩定的排序。

除此之外由於它移動次數較少所以它比直接插入排序時間效能優越,效率更高。

時間複雜度:最好情況:o(n)  最壞情況:o(n2)  平均情況:o(n1.3)

空間複雜度:o(1)

希爾排序的主要思想什麼?

其實它只是比直接插入排序多了個分組,那麼它的主要思想是什麼呢?

我的理解是首先將待排序的元素分為若干個子串行,對子序列進行直接插入排序,待整個排序序列

基本有序之後再對所有元素進行直接插入排序

寫希爾排序**之前首先我們要先確定乙個增量:初始化時取序列的一半為增量,以後每次減半,直到增量為1;

**如下:

#include void shellsort(int par_array, int length)

else

}par_array[j + h] = temp;

} }}int main()

; int len = sizeof(a) / sizeof(a[0]); //求陣列長度

shellsort(a, len);

for (i = 0; i < len; i++)

printf("\n");

return 0;

}

排序2 希爾排序

shell排序本質也是一種插入排序,是先分組然後採用直接插入排序。因此也稱為縮小增量排序 2.1直接插入排序與希爾排序對比 前者時間複雜度o n 2 則100個資料需要10000次迴圈 後者若分為10組 100個資料分為10組,每組先有序 10 2 乘 10 1000次,再插入排序,而插入排序越有序...

排序2 希爾排序

希爾排序 shell sort 是改進後的插入排序,不同的是其設定乙個步長,將輸入按步長分組,對每組元素進行插入排序。然後減少步長,再次分組插入排序。直到步長變為1,也即對所有元素進行插入排序。一般來說,習慣於將初始步長設定為 n 2,然後每次減半,直至為1。乙個步長對應一趟分組排序。找到乙個特別好...

2 希爾排序

是對插入排序的改進,也叫作縮減增量排序。屬於原址排序。1 思路 先取乙個小於n 陣列長度 的整數d1作為第乙個增量,把檔案的全部記錄分成 n d1 個組。所有距離為d1的倍數的記錄放在同乙個組中。先在各組內進行直接插入排序 然後,取第二個增量d2 2 複雜度分析 2.1 時間複雜度 o o 1 3 ...