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