heapify函数无休止地递归

时间:2015-04-07 20:05:55

标签: recursion heap priority-queue binary-heap

以下是基于数组的优先级队列/二进制堆的递归heapify函数。

有人可以告诉我为什么我会进入无限递归吗?

private static void heapify(int i){

    if(i < b_heap.size()/2){

        int left = i * 2;
        int right = left++;

        if(b_heap.get(i).getP() > b_heap.get(left).getP()){
            swap(i,left);
        }
        if(b_heap.get(i).getP() > b_heap.get(right).getP()){
            swap(i,right);
        }

        heapify(i++);
        heapify(i+2);
    }
    else{
        return;
    }
}

好吧所以我修复了无限循环,但该函数仍然没有正确堆积。

这是新代码,

private static void heapify(int i){
    DecimalFormat df = new DecimalFormat("0.00");
    if(i < b_heap.size()/2){
        int left = i * 2;
        int right = i * 2 +1;

        if(b_heap.get(i).getP() > b_heap.get(left).getP()){
            swap(i,left);
        }
        if(b_heap.get(i).getP() > b_heap.get(right).getP()){
            swap(i,right);
        }
        i++;
        heapify(i);
    }
    else{
        return;
    }
}

0 个答案:

没有答案