堆的向下調整以及建立

2021-10-04 19:34:57 字數 709 閱讀 1312

堆的向下調整(以小堆為例)

1.先設定根節點為當前節點(通過下標來獲取),比較左右子樹的值,找出更小的值,用child來標記

2.比較child和parent的值,如果child比parent小,則不滿足小堆的規則,需要進行交換

3.如果child比parent大,滿足小堆的規則,不需要交換,調整就結束了

4.處理完乙個節點之後,從當前的child出發,迴圈之前的過程

public

static

void

shiftdown

(int

array,

int size,

int index)

//通過上面的比較,還不知道child是左子樹還是右子樹,但知道child下標一定對應左右子樹最小值的下標

if(array[child]

< array[parent]

)else

//更新parent和child,處理下乙個資料

parent = child;

child =

2* parent +1;

}}

public

static

void

createheap

(int

array,

int size)

}

堆的向上調整 向下調整(堆化)

資料結構上的堆在物理上是乙個陣列,在邏輯上是乙個二叉樹。大堆 根結點比孩子結點大 小堆 根結點比孩子結點小 堆化 向下調整 向上調整的前提都是 在二叉樹中,只有乙個位置不滿足堆的性質,其它位置都滿足堆的性質。向下調整 是讓調整的結點與其孩子節點進行比較 向上調整 是讓調整的結點與其父親結點進行比較 ...

基於向上調整與向下調整建堆

public class testdemo 經過if條件語句 不知道child指向的左右哪棵子樹,但指向的肯定是左右子樹中值較大的那個 下面判斷child位置的元素與parent位置的元素哪個大 如果不符合大堆的要求 child位置的元素 parent位置的元素 交換兩者的值 if array ch...

堆排序(向下調整建堆後再排序)

includeusing namespace std void adjustdown int int int void buildmaxheap int a,int len void adjustdown int a,int k,int len a k temp 找到了最終的位置並放入 void h...