Max Heapify问题

时间:2016-09-15 04:27:36

标签: java heap heapsort

我一直试图将这段代码调试好几个小时。我不知道为什么不重新安排这些条款。我已经尝试了我能想到的一切。有人可以帮忙吗?感谢。

public void heapify(int i)  // utility routine to percolate down from index i
{
    printHeap();
    int left, r, min;
    Process tmp;

    left = lchild(i);           // left child
    r = rchild(i);                  // right child

    if(left < size() && A[left].compareTo(A[i])<0)      // find smallest child
        min = left;                 // save index of smaller child
    else
        min = i;

    if(r < size() && A[r].compareTo(A[min])<0)
        min = r;                // save index of smaller child

    if(min != i)                // swap and percolate, if necessary
    {
        tmp = A[i];             // exchange values at two indices
        A[i] = A[min];
        A[min] = tmp;
        heapify(min);

        // call heapify
    }// end if
printHeap();
}// end method heapify


private int lchild(int i) {
    return 2 * i + 1;
}

private int rchild(int i) {
    return 2 * i + 2;
}

即使我在堆的每个元素上调用heapify也不起作用:/ 这是compareTo。它应该首先使用优先级排列最大堆,然后如果有一个平局,它将转到唯一的时间到达值。

public int compareTo(Process o) {
    int val;
    if (this.priority > o.getPriority()) {
        val = -1;
    } else if (this.priority == o.getPriority()) {
        if (this.arrivalTime < o.getArrivalTime()) { //Earlier time
            val = -1;
        } else {
            val = 1;
        }
    } else {
        val = 1;
    }

    return val;
}

2 个答案:

答案 0 :(得分:1)

将数组组织到堆中的最快的已知方法称为Floyd's Algorithm。从阵列的中间开始,向根部移动,根据需要向下筛选每个项目。在你的情况下:

m-n2

您应该能够调用您提供的m+n2功能。

要了解其工作原理,请查看https://stackoverflow.com/a/39020777/56778

答案 1 :(得分:0)

我明白了。毕竟,这个方法不是问题。感谢大家!