當前位置:編程學習大全網 - 網站源碼 - Leaf應用程序源代碼

Leaf應用程序源代碼

假設大根堆的數組元素是a[1],a[2],...,a[n],下標從1開始,a[0]可以用來臨時保存數據。

加在尾部的元素壹定是葉節點,這裏是a[n+1],假設它的下標是k。

父節點下標為k/2,大根堆中父節點的值必須大於等於子節點。

因此,向上調整a[k]並不斷與其父節點進行比較。如果它大於父節點,將向下復制父節點。

直到a[k]小於或等於其父節點,然後將a[n+1]的值插入a[k]的當前位置。

參考代碼如下:

可以看到,插入過程正好與圖2中HeapAdjust()的方向相反,壹個向上調整,壹個向下調整。

源代碼是:

//向上調整大根堆中的葉節點a[k]。

void MaxHeapFixup(int a[],int k) {

a[0]= a[k];// a[0]臨時保存a[k]的值

int I;// a[i]是a[k]的父節點

for(I = k/2;我& gt= 1;i = i/2) {

if(a[I]& gt;= a[k]) //如果父節點不小於其子節點,則找到插入位置。

打破;

否則{

a[k]= a[I];//否則,將較小父節點的值向下復制到其子節點。

k = I;

}

}

a[k]= a[0];//將葉節點插入當前滿足大根堆條件的位置。

}

//在根堆中插入新元素num,默認情況下插入到最後壹個位置。

void maxheapadnum(int a[],int n,int num) {

a[n+1]= num;

MaxHeapFixup(a,n+1);

}

  • 上一篇:斑馬斑馬人聲是c調為什麽伴奏是E
  • 下一篇:c++問題(cout<<c<<endl; 為什麽是COUT<<c)
  • copyright 2024編程學習大全網