0

以下は、配列ベースのプライオリティ キュー/バイナリ ヒープの再帰的 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;
    }
}
4

0 に答える 0