PAT:堆模板

Posted 花落,莫相离

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT:堆模板相关的知识,希望对你有一定的参考价值。

//注意为方便操作,堆的下标从1开始
const int maxn = 100;
int heap[maxn], n = 10;

//向下调整
void downAdjust(int low, int high){
    int i = low, j = 2*i;
    while(j <= high){
        if(j + 1 <= high && heap[j+1] > heap[j]){//此处不要忘记判断j+1是否超过了high
            j = j+1;
        }
        if(heap[i] < heap[j]){
            swap(heap[i], heap[j]);
            i = j;
            j = 2*i;
        }else{
            break;
        }
    }
}

//建堆
void createHeap(){
    for(int i = n/2; i >= 1; i--){
        downAdjust(i, n);
    }
}

//删除堆顶元素
void delTop(){
    heap[1] = heap[n--];
    downAdjust(1, n);   //此处后面的是n,因为n已经自减了
}

//向上调整
void upAdjust(int low, int high){
    int i = high, j = i/2;
    while(j >= low){
        if(heap[i] > heap[j]){
            swap(heap[i], heap[j]);
            i = j;
            j = i/2;
        }else{
            break;
        }
    }
}

//添加元素
void insert(int x){
    heap[++n] = x;
    upAdjust(1, n);
}

//堆排序
void heapSort(){
    createHeap();
    for(int i = n; i > 1; i--){//从后往前倒着枚举交换
        swap(heap[1], heap[i]);
        downAdjust(1, i-1);
    }
}

以上是关于PAT:堆模板的主要内容,如果未能解决你的问题,请参考以下文章

PAT-乙级-1049 数列的片段和

PAT Basic 1049

PAT 数列的片段和简单数论

VSCode自定义代码片段——.vue文件的模板

PAT乙级1049 数列的片段和 (20 分)

VSCode自定义代码片段1——vue主模板