排序算法——希爾排序的圖解、代碼實現以及時間復雜度分析


希爾排序是沖破二次時間屏障的第一批算法之一。
希爾排序通過比較相距一定間隔的元素來工作;各躺比較所用的距離隨着算法的進行而減小,直到只比較相鄰元素的最后一趟排序為止。由於這個原因,希爾排序有時也叫做縮減增量排序
希爾排序使用一個序列h1,h2,…,hi,這個序列叫做增量序列(increment sequence)。增量序列只要求h1=1,以及hi>hi-1。在使用hk的一趟排序之后,對於每一個i我們都有a[i] <=a[i+hk];所有間隔hk的元素都被排序。此時稱文件是hk-sorted(hk排序的)。
希爾的增量序列
增量序列的一個流行(但是不好)的選擇是使用Shell建議的序列:ht=(N/2)向下取整和hk=(hk+1/2)向下取整

希爾排序的原理:

img2

下面是使用希爾序列的希爾排序的編程實現:

希爾排序的運行時間依賴於增量序列的選擇。

7.3 使用希爾增量時希爾排序的最壞情形運行時間為θ(N2)。

Hibbard增量序列:1,4,7,…,2k-1。這個增量的特點是增量沒有公因子

7.4 使用Hibbard增量的希爾排序的最壞情形運行時間為θ(N3/2)。

Sedgewick提出了幾種增量序列,其最壞情形運行時間為O(N4/3)。其中最好的是序列{1,5,19,41,109,…},雅思托福該序列中的項或者是9*4i-9*2i+1的形式,或者是4i-3*2i+1。這個增量序列在實踐中還是最為人們稱道的。
希爾排序的性能在事件中是完全可以接受的,即使是對於數以萬計的N仍是如此。編程的簡單特點使得它成為對適度地大量的輸入數據經常選用的算法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM