J'écrit le code JavaScript pour construire un maximum heapify qui maintient la propriété max-tas, mais j'ai beaucoup de questions concernant la mise en œuvre:MAX_HEAPIFY mise en œuvre
tableauI test sur: [1, 2, 3, 4 , 7, 8, 9, 10, 14, 16]
quand je test sur le réseau quand il est triée je suis:
[16, 14, 9, 10, 7, 8 , 3, 1, 4, 2]
Alors que je unsorted obtenu:
[16, 14, 8, 9, 10, 2, 3, 4, 7, 1]
Pourquoi ou pourquoi pas est le maxi- Heapify affecté par le tableau en cours de tri?
je trouve que, lorsque le tableau est trié la solution est la suivante:
[16, 14, 10, 8, 7, 9, 3, 2, 4, 1]
Pourquoi Ai-je obtenu une solution différente lorsque le tableau est trié, même si je trouve que ma mise en œuvre est correcte selon le pseudocode de CLRS?
Pourriez-vous spécifier une autre procédure qui n'utilise pas la récursivité tout en obtenant la même fonctionnalité?
function BuildMaxHeap(array){
for(var i = Math.floor(array.length/2); i >= 0; i--){
MAX_HEAPIFY(array, i);
}
return array;
}
function MAX_HEAPIFY(array, i) {
var left = 2 * i + 1;
var right = 2 * i + 2;
var largest = i;
if(left <= array.length && array[left] > array[largest]){
largest = left;
}
if(right <= array.length && array[right] > array[largest]){
largest = right;
}
if(largest != i){
var temp = array[i];
array[i] = array[largest];
array[largest] = temp;
MAX_HEAPIFY(array, largest);
}
}
Je demandais vraiment pourquoi le code ne fonctionne pas comme prévu. –