有谁知道我将如何使最小堆而不是最大堆?此函数创建一个最大堆,但我不知道如何使其成为最小。
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;
}
最佳答案
您需要翻转比较条件:
if (siftItem <= heap[parent])
关于c - 我将如何更改此函数以实现最小堆而不是最大堆?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25024584/