有谁知道我将如何使最小堆而不是最大堆?此函数创建一个最大堆,但我不知道如何使其成为最小。

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/

10-15 00:23