數據結構與算法理論篇--堆排序

這裏只談理論不談具體代碼實現
堆排序是一種選擇排序,關鍵是篩選。進行堆排序要先了解怎麼建立堆在瞭解堆調整。堆又分爲大根堆和小根堆,這裏以小根堆爲例。小根堆的每一個節點都要小於它的兩個左右子樹的根節點。
建立堆:先按照所給序列(從上到下從左到右)進行初始化成一個二叉樹,然後從最後一個非葉子結點開始調整

  1. 調整從第n/2個元素開始,將以該元素爲根的二叉樹調整爲堆
  2. 將以序號爲n/2-1的節點爲根的二叉樹調整爲堆
  3. 再將以序號爲n/2-2的節點爲根的二叉樹調整爲根
  4. 再以序號爲n/2-3的節點爲根的二叉樹調整爲堆

  5. *(這裏最後一步應該是n/2-1) *
    最後一步在這裏插入圖片描述
    堆調整:
  6. 輸出堆頂元素之後,以堆中最後一個元素替代之;
  7. 然後將根 節點值與左右子樹的根節點進行比較,並與其中小者進行交換
  8. 重複上述操作,直至葉子結點,將新得到的對,稱這個對頂至葉子的調整過程稱爲篩選。大根堆思路一樣
    在這裏插入圖片描述這樣一步一步就完成了排序!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章