考研數據結構----MaxHeap


原理

這里我們建立的是最大堆,用完全二叉樹來表示這個堆;
1. 堆頂比兩棵子樹中的任何元素都要大;
2. 每棵子樹同樣滿足這個條件;
即根是樹中最大值,每棵子樹的根是子樹中的最大值
所以我們在構造的時候要先從最小的子樹開始構造,這樣才能構造更大的子樹

/*
* 建立大頂堆,a[1]為最大元素
*/

typedef struct {
/*自底向上調整每一個元素,每次構造一個子結構*/
void buildMaxHeap(int a[], int len) {
for (int i = len / 2; i >= 1;--i)
AjustDown(a, i, len);
}
/*將第k個元素向下調整*/
void AjustDown(int a[], int k, int len) {
int temp = a[k];
for (int i = 2*k;i <= len;i *= 2) {
if (i < len && a[i] < a[i+1]) ++i;
if (temp >= a[i]) break;
a[k] = a[i];
k = i;
}
a[k] = temp;
}
/*把第k個元素向上調整*/
void AjustUp(int a[], int k) {
int temp = a[k];
int i = k / 2;
while(i >= 1 && a[i] < temp) {
a[k] = a[i];
k = i;
i /= 2;
}
a[k] = temp;
}
/*插入元素*/
void InsertElement(int a[], int& len, int value) {
a[++len] = value;
AjustUp(a, len);
}
/*刪除第k個元素*/
int DeleteElement(int a[], int& len, int k) {
int temp = a[k];
a[len] = a[k];
AjustDown(a, k, --len);
return temp;
}
}MaxHeap;

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com