有谁知道如何制作最小堆而不是最大堆?这个函数创建了一个最大堆,但我不知道如何使它成为最小值。
void siftUp(int heap[], int n) {
// Sift the value in heap[n] so that heap[1..n] is a heap
int siftItem = heap[n];
int child = n;
int parent = child / 2;
while (parent > 0) {
if (siftItem >= heap[parent]) {
break;
}
heap[child] = heap[parent]; // Move the parent down
child = parent;
parent = child / 2;
}
heap[child] = siftItem;
}
答案 0 :(得分:1)
您需要翻转比较条件:
if (siftItem <= heap[parent])