- 堆的建立有两种方式,一个向上调整,一个向下调整,这两个得到的结果可能不同
- 向上调整一般用于边输入数据边建立,是给定数字顺序插入
- 向下调整一般是将所有结点先加入到一棵完全二叉树中,然后对二叉树的所有非叶子结点进行向下调整(从非叶子结点n/2开始,一直到1)
向上调整(大顶堆为例):
void upAdjust(int i) {
if(i == 1) return ;
while(i != 1) {
if(heap[i] > heap[i / 2]) {
swap(heap[i], heap[i / 2]);
i = i / 2;
} else {
break;
}
}
}
for(int i = 1; i <= n; i++) {
scanf("%d", &v[i]);
upAdj