我想从二进制堆中提取最小值,但它不起作用。这里是我的BubbleDown代码:对二进制最小堆的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;
}
}
它看起来像只交换了几个号码,但不是所有的人,我不明白为什么。我试图用不同的方式重新编码它,并且已经多次...
我在做什么错?
谢谢......虽然我不喜欢使用休息时间,但我正在考虑在while条件中添加一个变量,但还有其他方法吗?我想不出任何... – 2010-04-21 16:54:21
@Nazgul,不容易。在你知道之前,你必须做所有的左/右的东西。你可以保留一个布尔标志'noptInOrderYet',但我会使用一个中断。 – 2010-04-21 17:00:41
我不想休息,但感谢您的洞察力。 – 2010-04-21 17:13:11