我們來談一談希爾排序:
希爾排序和直接插入排序一樣屬於插入排序,但是由於分組的存在,相等的元素可能分在不同組,
導致他們的次序可能發生變化,所以它是不穩定的排序。
除此之外由於它移動次數較少所以它比直接插入排序時間效能優越,效率更高。
時間複雜度:最好情況: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 ...