维护最大/最小堆函数的循环实现

来源:互联网 发布:爱淘宝怎么开店 编辑:程序博客网 时间:2024/06/06 07:33

《算法导论》练习题6.2-5

MaxHeapify的代码效率较高,但第10行中的递归调用可能例外。他可能使某些编译器产生低效的代码。请用循环控结构取代递归,重写MaxHeapify代码。


代码如下

void MaxHeapify(int A[], int pos, int length)// length 逻辑长度 pos 物理位置{    int key = A[pos];    int childPtr = pos * 2 + 1;    while( childPtr < length )    {        if(A[childPtr+1]>A[childPtr])            childPtr++;        if(A[childPtr]>key)        {            A[(childPtr-1)/2] = A[childPtr];//每次向上覆盖            childPtr = childPtr * 2 + 1;        }        else            break;    }    A[(childPtr - 1) / 2] = key;//将key插入回堆当中}
0 0
原创粉丝点击