6-8 Percolate Up and Down (20分)

 

 

 

 解题思路:小顶堆之向上高速+向下调整

void PercolateUp( int p, PriorityQueue H ){
    H->Elements[0]=H->Elements[p];
    int i;
    for(i=p/2;i>0;i/=2)
    {
        if(H->Elements[0]>=H->Elements[i])break;
        else
        {
            H->Elements[p]=H->Elements[i];
            p=i;
        }
    }
    H->Elements[p]=H->Elements[0];
}
void PercolateDown( int p, PriorityQueue H )
{
    H->Elements[0]=H->Elements[p];
    int i;
    for(i=p*2;i<=H->Size;i*=2)
    {
        if(i<H->Size&&H->Elements[i]>H->Elements[i+1])
        i++;
        if(H->Elements[0]<=H->Elements[i])break;
        else
        {
            H->Elements[p]=H->Elements[i];
            p=i;
        }
    }
    H->Elements[p]=H->Elements[0];
}

原文地址:https://www.cnblogs.com/snzhong/p/12745013.html