バイナリ ヒープから最小値を抽出しようとしていますが、うまくいきません。ここに私のBubbleDownコードがあります:
void heapBubbleDown(Heap * const heap, int idx) {
int min;
while(RIGHT(idx) < heap->count) {
min = LEFT(idx);
if(RIGHT(idx) < heap->count) {
if(heap->items[LEFT(idx)] > heap->items[RIGHT(idx)]) {
min = RIGHT(idx);
}
}
heapSwapValue(&(heap->items[idx]), &(heap->items[min]));
idx = min;
}
}
いくつかの数字だけを交換しているように見えますが、すべてではありません。理由がわかりません。私はそれを別の方法で再コーディングしようとしましたが、すでに何度も...
私は何を間違っていますか?