(二叉)堆是一个数组,可以被看成一个近似的完全二叉树。
可以被用作对数组进行排序或者优先队列来使用。
以大顶堆为例,主要函数包含有以下几个:
void Max-Heap(int *a,int i,int size) //调整堆 { int l=2*i; int r=2*i+1; int max=i; if(i<=size/2) { if(l<=size&&a[l]>a[max]) { max=l; } if(r<=size&&a[r]>a[max]) { max=r; } if(max!=i) { swap(a[i],a[max]); Max-Heap(a,max,size); } } } void BuildHeap(int *a,int size) { int i; for(i=size/2;i>=1;i--) //代表从叶子节点开始 { Max-Heap(a,i,size); } } void HeapSort(int *a,int size) //堆排序 { int i; BuildHeap(a,size); for(i=size;i>=1;i--) { swap(a[1],a[i]); Max-Heap(a,1,i-1); } }