兩種建立堆的方法HeapInsert & Heapify


參考 堆排序中兩種建堆方法的比較

第一種方法HeapInsert

它可以假定我們事先不知道有多少個元素,通過不斷往堆里面插入元素進行調整來構建堆。

它的大致步驟如下:

  1. 首先增加堆的長度,在最末尾的地方加入最新插入的元素。

  2. 比較當前元素和它的父結點值,如果比父結點值大,則交換兩個元素,否則返回。

  3. 重復步驟2.

這種插入建堆的時間復雜度是O(NlogN)

第二種方法Heapify

從最后一個非葉子節點一直到根結點進行堆化的調整。如果當前節點小於某個自己的孩子節點(大根堆中),那么當前節點和這個孩子交換。Heapify是一種類似下沉的操作,HeapInsert是一種類似上浮的操作。

這種建堆的時間復雜度是O(N)

怎么找到第一個非葉子節點

參考博客中根節點在數組中的索引為1,所以第一個非葉子節點的計算公式為: last_non_leaf = arr.length/2。

如果根節點在數組中的索引為0,那么第一個非葉子節點的計算公式為: last_non_leav = (arr.length - 2)/2

可以設最后一個非葉子節點位置為x,那么最后一個葉子節點一定是(2x+1) 或者(2x+2)中的一個,然后可以建立方程求解。


免責聲明!

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



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