1.
堆: 堆(heap)是一種滿足特定條件的完全二叉樹
小頂堆:任意節點的值 <= 其子節點的值
大頂堆: 任意節點的值 >= 其子節點的值
堆作為完全二叉樹的一個特例,具有以下特性。
最底層節點靠左填充,其他層的節點都被填滿。
我們將二叉樹的根節點稱為“堆頂”,將底層最靠右的節點稱為“堆底”。
對於大頂堆(小頂堆),堆頂元素(根節點)的值是最大(最小)的。
2. 堆常用於實現優先佇列
完全二叉樹可以用陣列表示,第i個元素的子節點是2*i+1或2*i+2, 而父節點是 (i-1)/2
第一個葉子節點:n/2
最後一個父節點:n/2 -1
3. 使用堆排序:
先建堆, 就是倒序處理所有的父節點, 進行shift down 操作。然後出堆。