是對插入排序的改進,也叫作縮減增量排序。屬於原址排序。
(1)思路:
先取乙個小於n(陣列長度)的整數d1作為第乙個增量,把檔案的全部記錄分成(n/d1)個組。所有距離為d1的倍數的記錄放在同乙個組中。先在各組內進行直接插入排序;然後,取第二個增量d2
(2)複雜度分析:
(2.1)時間複雜度:
o(o(1)。
(3)穩定性:
希爾排序是按照不同步長對元素進行插入排序,當剛開始元素很無序的時候,步長最大,所以插入排序的元素個數很少,速度很快;當元素基本有序了,步長很小, 插入排序對於有序的序列效率很高。所以,希爾排序的時間複雜度會比o(n²)好一些。由於多次插入排序,我們知道一次插入排序是穩定的,不會改變相同元 素的相對順序,但在不同的插入排序過程中,相同的元素可能在各自的插入排序中移動,最後其穩定性就會被打亂,所以shell排序是不穩定的。
**片段:
void shell_sort(int a,int n)
a[j+d]=tmp;
} d=d/2; //更新增量d
}}
排序 2 希爾排序
我們來談一談希爾排序 希爾排序和直接插入排序一樣屬於插入排序,但是由於分組的存在,相等的元素可能分在不同組,導致他們的次序可能發生變化,所以它是不穩定的排序。除此之外由於它移動次數較少所以它比直接插入排序時間效能優越,效率更高。時間複雜度 最好情況 o n 最壞情況 o n2 平均情況 o n1.3...
排序2 希爾排序
shell排序本質也是一種插入排序,是先分組然後採用直接插入排序。因此也稱為縮小增量排序 2.1直接插入排序與希爾排序對比 前者時間複雜度o n 2 則100個資料需要10000次迴圈 後者若分為10組 100個資料分為10組,每組先有序 10 2 乘 10 1000次,再插入排序,而插入排序越有序...
排序2 希爾排序
希爾排序 shell sort 是改進後的插入排序,不同的是其設定乙個步長,將輸入按步長分組,對每組元素進行插入排序。然後減少步長,再次分組插入排序。直到步長變為1,也即對所有元素進行插入排序。一般來說,習慣於將初始步長設定為 n 2,然後每次減半,直至為1。乙個步長對應一趟分組排序。找到乙個特別好...