資料結構與演算法之--進階排序:shell排序和快速排序【未完待續】

來源:互聯網
上載者:User

標籤:參考文獻   有序   標記   資料   通過   參考   ges   技術   效果   

  進階排序比簡單排序要快的多,簡單排序的時間複雜度是O(N^2),希爾(shell)排序的是O(N*(logN)^2),而快速排序是O(N*logN)。

說明:下面以int數組的從小到大排序為例。

 

希爾(shell)排序

  希爾排序是基於插入排序的,首先回顧一下插入排序,假設插入是從左向右執行的,待插入元素的左邊是有序的,且假如待插入元素比左邊的都小,就需要挪動左邊的所有元素,如所示:

==>

圖1和圖2:插入右邊的temp柱需要outer標記位左邊的五個柱子都向右挪動

 

3所示,相比插入排序,希爾排序是這樣做的:對固定間隔的元素做插入排序,然後減小間隔,重複做插入排序,直到間隔減小為1。

 ==> 

圖3和圖4: outer位置和inner-h位置的柱子做插入排序 

資料量大的圖形看這個過程更容易形象地把握演算法特點,5和6,總元素數量等於100:

  

圖5和圖6:間隔分別為40和13執行完插入排序後的效果

相比簡單插入排序,大間隔地做插入排序有兩個好處:

  一是大間隔直接導致需要挪動的資料稀少,且資料挪動的效率高,圖5中一次挪動可以跨越40個位置;

  二是,經過前一步大間隔的插入排序後,整個數組從整體上粗略地看已經有了明顯的順序,後一步小間隔的插入排序時,一部分操作是不需要挪動資料的,再次減少了挪動資料的次數。

間隔的序列:常用序列有Knuth提出,通過遞迴表示:h=*3h+1。

希爾排序的效率:“還沒有人能夠從理論上分析希爾排序的效率,各種基於實驗的評估,估計它的時間級從O(N^(3/2))到O(N^(7/6))”--[1]。

 

快速排序

(未完待續。。。)

參考文獻

【1】Java資料結構與演算法 Rober Lafore 2nd

文中的圖片

  來自文獻【1】附帶的Java applet示範小程式。

資料結構與演算法之--進階排序:shell排序和快速排序【未完待續】

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.