堆排序算法思想

前兩天看了看堆排序算法,啃了半天的書,最后搞明白了堆排序算法,今天有時間給大家說說這個堆排序算法。
首先講一下算法的定義吧!
****算法****:解題方案的準確完整的描述,是解決問題的一系列清晰的指令,用系統(tǒng)的方法去描述解決問題的策略機制
<small>上面是一段比較官方用詞的解釋,我用自己簡單點的話說就是算法就是用來解決問題的清晰的命令</small>


說完算法的定義我們還得說一下有關于算法的基礎的知識點吧!
****樹(tree):****是一種抽象數(shù)據(jù)類型,用來模擬具有樹狀結構性質(zhì)的數(shù)據(jù)集合。它是由n(n>=1)個有限節(jié)點組成一個具有層次關系的集合把它叫做“樹”是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉是朝下的。
特點:
<li><small>每個節(jié)點有零個或多個子節(jié)點;</li>
<li>沒有父節(jié)點的節(jié)點稱為根節(jié)點;</li>
<li>每一個非根節(jié)點有且只有一個父節(jié)點;</li>
<li>除了根節(jié)點外,每個子節(jié)點可以分為多個不相交的子樹;</small></li>
除了上面的這些還有一些比如說樹的度節(jié)點的度父節(jié)點,子節(jié)點,兄弟節(jié)點等等這些我就不一一詳細的介紹了,給大家一個網(wǎng)址上面對各個術語的解釋。
https://zh.wikipedia.org/wiki/%E6%A0%91_(%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84)


終于到了堆排序算法了!
****堆排序:****簡單的講就是利用對的性質(zhì)進行的一種選擇排序。
堆分為大頂堆和小頂堆其中大頂堆滿足條件:

image.png

小頂堆滿足條件:

image.png

基本思想:(大頂堆)

1.將待排序的關鍵字序列(R1,R2,...Rn)構建大頂堆,此堆為初始的無序區(qū).

2.將堆頂元素R[1]與最后一個元素R[n]交換,此時得到新的無序區(qū)
(R1,R2,......Rn-1)和新的有序區(qū)(Rn),且滿足R[1,2...n-1]<=R[n];

3.由于交換后新的堆頂R[1]可能違反堆的性質(zhì),因此需要對當前無序區(qū)(R1,R2,......Rn-1)調(diào)整為新堆,然后再次將R[1]與無序區(qū)最后一個元素交換,得到新的無序區(qū)(R1,R2....Rn-2)和新的有序區(qū)(Rn-1,Rn)。不斷重復此過程直到有序區(qū)的元素個數(shù)為n-1,則整個排序過程完成。


例:對數(shù)組a排序:a[]={16,7,3,20,17,8}

(1)構造樹


image.png

(2)構造初始堆

image.png

和上圖比較就會知道,我們首先比較子節(jié)點20>17>7

image.png

同上8>3


image.png

然后比較20,17,8,按照大頂堆得性質(zhì),最大的在最上面然后把最大的放在最后面,和最后一個換位置(Rn)如下圖:


image.png

然后在進行排序,17>8>3
image.png

繼續(xù)如上各個節(jié)點排序
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

最后這樣就排完序了


image.png
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容