看了一下午。。。根据算法导论上的伪代码写的。
#include<iostream>
using namespace std;
int A[11]={0,4,1,3,2,16,9,10,14,8,7};
int len=10;
int heap_size=len;
void Min_heapify(int i)
{
int l=i<<1;
int r=(i<<1)+1;
int min=i;
if(l<=heap_size&&A[l]<A[min])
min=l;
if(r<=heap_size&&A[r]<A[min])
min=r;
if(A[min]==A[i])
return;
else
{
int t=A[i];
A[i]=A[min];
A[min]=t;
Min_heapify(min);
}
}
void Build_min_heap()
{
for(int i=heap_size/2;i>=1;i--)
Min_heapify(i);
}
int Heap_extract_min()
{
int min=A[1];
A[1]=A[heap_size];
heap_size-=1;
Min_heapify(1);
return min;
}
void Min_decrease_key(int i,int key)
{
A[i]=key;
while(i>1&&A[i/2]>A[i])
{
int t=A[i];
A[i]=A[i/2];
A[i/2]=t;
i=i/2;
}
}
int main()
{
Build_min_heap();
//........
//........
return 0;
}