功能介绍:
min_heap p;
p.len;
p.add(x);
p.del();
p.top();
p.print();
p.build(a,n);
p.clear();
p.psort();
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 100052
struct min_heap{
int data[maxn],len=0;
void pushup(int x){
if(x==1)return;
int fa=x>>1;
if(data[x]<data[fa]){
int temp=data[x];
data[x]=data[fa];
data[fa]=temp;
pushup(fa);
}
else return;
}
void pushdown(int x){
int l=x<<1, r=x<<1|1;
if(l>len || (data[x]<=data[l]&& data[x]<=data[r]) ) return;
if(r>len || data[l]<data[r]){
int temp=data[l];
data[l]=data[x];
data[x]=temp;
pushdown(l);
}
else {
int temp=data[r];
data[r]=data[x];
data[x]=temp;
pushdown(r);
}
}
void build(int *a, int n){
len=n;
for(int i=1;i<=n;i++){
data[i]=a[i-1];
}
for(int i=len/2;i>0;i--){
pushdown(i);
}
}
void add(int val){
len++;
data[len]=val;
pushup(val);
}
int top(){
return data[1] ;
}
void del(){
data[1]=data[len];
len--;
pushdown(1);
}
void print(){
for(int i=1;i<=len;i++){
printf("%d ",data[i]);
}
printf("\n");
}
void psort(){
while(len>0){
printf("%d ",top());
del();
}
printf("\n");
}
void clear(){
len=0;
}
};
int main(){
min_heap p;
p.clear();
int n,a[1000];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
p.build(a,n);
p.psort();
return 0;
}