版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wingrez/article/details/84536565
#define MAXN 10 //最大元素个数
int N;//当前二叉堆中的元素个数
int pq[MAXN+1];//二叉堆数组
bool less(int i,int j){
return pq[i]<pq[j];
}
void exch(int i,int j){
int t=pq[i];pq[i]=pq[j];pq[j]=t;
}
void swim(int k){
while(k>1 && less(k/2,k)){
exch(k/2,k);
k=k/2;
}
}
void sink(int k){
while(2*k<=N){
int j=2*k;
if(j<N && less(j,j+1))j=j+1;
if(!less(k,j)) break;
exch(k,j);
k=j;
}
}
void insert(int v){
pq[++N]=v;
swim(N);
}
int delMax(){
int max=pq[1];
exch(1,N);
N--;
sink(1);
return max;
}