堆:1.滿足完全二叉樹 2. 左右子結點 都小於父節點 或 左右子結點 都大於父節點
大堆:左右子結點 都小於父節點
小堆:左右子結點 都大於父節點
// 堆**
public class heap>
//判斷堆中索引i處的元素是否小於索引j處的元素
private boolean less(int i, int j)
//交換堆中i索引和j索引處的值
private void exch(int i, int j)
//往堆中插入乙個元素
public void insert(t t)
//使用上浮演算法,使索引k處的元素能在堆中處於乙個正確的位置
private void swim(int k)
k = k / 2;}}
//刪除堆中最大的元素,並返回這個最大元素
public t delmax()
//使用下沉演算法,使索引k處的元素能在堆中處於乙個正確的位置
private void sink(int k)else
}else
//比較當前結點和子結點中的較大者,如果當前結點不小,則結束迴圈
if (!less(k,max))
//當前結點小,則交換,
exch(k,max);
k = max;}}
public static void main(string args)
}}
演算法複習1 堆
insert 函式有以下三種用法 1 在指定位置loc前插入值為val的元素,返回指向這個元素的迭代器 2 在指定位置loc前插入num個值為val的元素 3 在指定位置loc前插入區間 start,end 的所有元素 1 題目描述 如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中...
資料結構複習 堆
說真的浙大的老師講的挺好的。其中建堆的時候引用了哨兵概念少了很多判斷,然後用堆的插入刪除操作做起來簡直飛快。貼乙個自己練習的 貼的是最大堆,最小堆的操作其實是類似的。其實堆在其他地方還叫做優先佇列。自己模擬堆的話,還可以遍歷。直接用stl的話,不能遍歷。includeusing namespace ...
演算法複習(1) 堆排序
堆是一種完全二叉樹結構,以陣列儲存 堆的最後一層從左開始填充 對於元素個數為n的堆來說,高度為 floor lgn 對於給定下標i 從0開始 父節點,左兒子,右兒子分別為 parent i return i 1 1 left i return 2i 1 right i return 2i 2堆排序主...