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:堆模板的主要内容,如果未能解决你的问题,请参考以下文章