如果根節點的索引為0,那麼最後乙個非葉子節點的索引為 (n / 2) - 1。n為節點的數量。
最後乙個節點的索引為 n - 1。最後乙個節點的父節點即為最後乙個非葉子節點。
已知最後乙個節點的索引,以此推導出其父節點索引。
如果n為奇數,假設最後乙個非葉子節點的索引為k1,那麼有 2 * k1 + 2 = n - 1,所以
如果n為偶數,假設最後乙個非葉子結點的索引為k2,那麼有 2 * k2 + 1 = n - 1,所以
我們使用,並對其取整,作為統一的公式,
當n為偶數時k2是正確值,
當n為奇數時,使用k2比正確值大1/2。但是向下取整後,
[k2]對於n為偶數和奇數都可以。
排序演算法4 堆排序
基本思想 大堆對應公升序序列,小堆對應降序佇列,我們從最後乙個非葉子結點建堆,步驟如下 將堆頂元素與當前最大堆的最後乙個節點交換 最大堆節點 1,即調整剩下的n 1個節點 從堆頂繼續向下調整,試之滿足最大堆,迴圈 和 直至剩下乙個節點。時間複雜度 nlogn 穩 定 性 不穩定 適用場景 topk等...
演算法4 堆排序
1.堆排序基本思想 利用堆 最大堆,最小堆 進行排序,特殊的樹形資料結構 完全二叉樹 將乙個無序序列構造成乙個堆。輸出堆頂元素後,調整剩餘元素稱為乙個新堆。2.複雜度 堆排序的主要執行時間耗費在初始構建堆和重建堆時的反覆篩選上。構建堆的時間複雜度為o n 重建堆的時間複雜度為o nlogn 堆排序對...
演算法(第4版) 1 1 13
編寫一段 列印出乙個m行n列的二維陣列的轉置 交換行和列 package temporary import edu.princeton.cs.algs4.public class practice public static void main string args todo 自動生成的方法存根 ...