J'essaie d'extraire le minimum d'un tas binaire, mais ça ne fonctionne pas. Voici mon code BubbleDown:Opération BubbleDown sur min-heap binaire ne fonctionne pas
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;
}
}
On dirait qu'il permute seulement quelques chiffres, mais pas tous, je ne comprends pas pourquoi. J'ai essayé de le recoder différemment et plusieurs fois déjà ...
Qu'est-ce que je fais mal?
Merci ... Je n'aime pas utiliser les pauses, je pense à ajouter une variable à la condition while, mais y a-t-il un autre moyen? Je ne peux pas penser à tout ... –
@Nazgul, pas facile. Vous devez faire tous les trucs gauche/droite avant de pouvoir savoir. Vous pouvez garder un drapeau booléen 'noptInOrderYet', mais j'utiliserais une pause. –
Je préfère ne pas utiliser une pause, mais merci pour la perspicacité. –