看了一下午。。。根据算法导论上的伪代码写的。
#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; }