比较常规的题,试着写了下。
int heap[100];
int n;
void adjust_down(int rt)
{
if(rt<1||rt>n)
return;
if ( rt*2>n )
return;
else
{
int val=heap[rt<<1];
int child=rt<<1;
if(rt*2+1<=n&&heap[rt*2+1]<val)
{
val=heap[rt*2+1];
child=rt<<1|1;
}
if(val>=heap[rt])
return;
swap(heap[rt],heap[child]);
adjust_down(child);
}
}
void adjust_up(int rt)
{
while(rt!=1)
{
int par=rt>>1;
if(heap[par]>=heap[rt])
{
swap(heap[par],heap[rt]);
rt=par;
}
else
{
break;
}
}
}
void heap_push(int val)
{
heap[++n]=val;
adjust_up(n);
}
void make_heap()
{
int start=n>>1;
for(int i=start;i>=1;i--)
adjust_down(i);
}
void sort_heap()
{
while(n>1)
{
swap(heap[1],heap[n]);
n--;
adjust_down(1);
}
}