堆排序算法

//对顺序表L进行堆排序
void heapSort(SqList *L){
    for(int i=L->length/2;i>0;i--)
        heapAdjust(L,i,L->length);

    for(int i=L->length;i>1;i--){
        Sawp(L,1,i);
        heapAdjust(L,1,i-1);
    }
}

//调整L,使L->r[s..m]成为最大堆
void heapAdjust(SqList *L, int s, int m){
    int temp = L->r[s];

    for(int i=s*2;i<=m;i*=2){
        if(L-r[i]<l-r[i+1] && i<m)
            i++;

        if(temp>=L->r[i])
            break;

        L->r[s]=L->r[i];
        s=i;
    }
    L-r[s] = temp;
}
点赞