数据结构之堆

来源:互联网 发布:数据清单内容分类汇总 编辑:程序博客网 时间:2024/06/11 13:38

(二叉)堆是一个数组,可以被看成一个近似的完全二叉树。

可以被用作对数组进行排序或者优先队列来使用。

以大顶堆为例,主要函数包含有以下几个:

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);        }} 

原创粉丝点击