我正在尝试从二进制堆中提取最小值,但它不起作用。这是我的 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;
}
}
看起来它只交换了几个数字,但不是全部,我不明白为什么。我试图以不同的方式重新编码它,而且已经很多次了......
我究竟做错了什么?