//写的不太好见谅哈,没用动态数组,所以插入超过max不会扩表
#include <stdio.h>
#define max 10
int a[max]={-1,2,4,6,7,9,12};
int currentsize=sizeof(a)/sizeof(a[0]);
void insert(int x){
if(currentsize>max){
printf("full error\n");
return;
}
int hole=++currentsize;
for(a[0]=x;a[hole/2]>x;hole/=2)
a[hole]=a[hole/2];//子节点替换为父亲节点的值,直到父亲节点大
a[hole]=x;
}
int findmin(){
return a[1];
}
int deletemin(){
void downfilter(int);
int minelement=findmin();
a[1]=a[currentsize--];
downfilter(1);
return minelement;
}
void downfilter(int hole){
int child;
int tem=a[hole];
for(;hole*2<=currentsize;hole=child){
child=hole*2;
if(child!=currentsize&&a[child]<a[child+1])
child++;
if(a[child]<tem)
a[hole]=a[child];
else
break;
}
a[hole]=tem;
}
void heap(){//creat heap;
for(int i=currentsize/2;i>0;i--){
printf("heap creat\n");
downfilter(i);
}
}
int main(){
heap();
insert(5);
int min=deletemin();
printf("%d\n",min);
}