堆--學習記錄

此處默認二叉大根堆

描述:一棵樹,完全二叉(i的左孩子爲2i,右爲2i+1),對於每個節點,它的孩子鍵值小於它,優先隊列就是用堆實現的 

性質:1.樹根爲最大點(堆頂),故不斷重複 取頂→刪頂就能得到排序序列(堆排序)

             2.此結構決定了不能在裏面找任意元素(數組實現不服)或者迭代,(所以stl的優先隊列不能用這倆操作)


操作:1.基礎操作:節點的上浮與下沉:

                 上浮:一個節點,若其父親小於它,交換它和它父親,重複執行

                 下沉:一個節點,若其孩子大於它,交換它和它的值大的兒子,重複執行

聲明“最後一個節點”:最下層最右邊那個節點

           2.插入節點:把這個點作爲最後一個節點插入,然後對他進行上浮

           3.刪除節點:把最後一個節點的值賦到這個節點上並刪除最後那個節點,然後下沉(問題又回到了怎麼找這個節點上

           4.對一個數組建堆:將此數組看做數組實現的堆,從後向前一個個執行上浮的操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章