如何更改此函数以实现Min Heap而不是max?

时间:2014-07-29 20:40:22

标签: c

有谁知道如何制作最小堆而不是最大堆?这个函数创建了一个最大堆,但我不知道如何使它成为最小值。

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;
    }

1 个答案:

答案 0 :(得分:1)

您需要翻转比较条件:

if (siftItem <= heap[parent])