https://www.youtube.com/watch?v=klbGg8dmYTM
i
的 左子節點:2 * i + 1
i
的 右子節點:2 * i + 2
i
的 父節點:(i - 1) // 2
O(log n)
O(n)
O(n)
。優先順序佇列(Priority Queue):
* 優先順序佇列是一種特殊的佇列,每次取出優先順序最高的元素。
* 使用最大堆或最小堆可以實現優先順序佇列,最大堆取出最大值,最小堆取出最小值。
O(n log n)
,是穩定排序演算法之一。假設我們有一個陣列 [4, 10, 3, 5, 1]
,我們希望把它轉換成最大堆:
步驟 1:建構最大堆
* 將 [4, 10, 3, 5, 1]
插入到堆積樹中:
* 根節點:10
* 左子節點:5
* 右子節點:3
* 左子節點的左子節點:4
* 左子節點的右子節點:1
* 經過調整,形成的最大堆為:
10
/ \
5 3
/ \
4 1
步驟 2:插入一個新節點(例如:7
)
7
插入到最左邊的空位置,即 4
的左邊: 10
/ \
5 3
/ \
7 1
5
交換: 10
/ \
7 3
/ \
5 1