大根堆
typedef struct
{
int heap[205];
int size;
}Heap;
Heap s;
void Insert(int x)
{
int i;
for(i=++s.size;s.heap[i/2]<x;i/=2)
s.heap[i]=s.heap[i/2];
s.heap[i]=x;
}
int DeleteMax()
{
int i,child,min,max;
max=s.heap[1];
min=s.heap[s.size--];
for(i=1;i*2<=s.size;i=child)
{
child=2*i;
if(child!=s.size&&s.heap[child]<s.heap[child+1])
child++;
if(min<s.heap[child])
s.heap[i]=s.heap[child];
else break;
}
s.heap[i]=min;
return max;
}
小根堆
typedef struct
{
int heap[205];
int size;
}Heap;
Heap s;
void Insert(int x)
{
int i;
for(i=++s.size;s.heap[i/2]>x;i/=2)
s.heap[i]=s.heap[i/2];
s.heap[i]=x;
}
int DeleteMin()
{
int i,child,min,max;
min=s.heap[1];
max=s.heap[s.size--];
for(i=1;i*2<=s.size;i=child)
{
child=2*i;
if(child!=s.size&&s.heap[child]>s.heap[child+1])
child++;
if(max>s.heap[child])
s.heap[i]=s.heap[child];
else break;
}
s.heap[i]=max;
return min;
}