我寫的JavaScript代碼來構建一個最大heapify其保持最大堆屬性,但我有一個關於執行許多問題:MAX_HEAPIFY實施
陣列I上測試:1,2,3,4 ,7,8,9,10,14,16]
當我測試時是排序我得到了陣列上:
[16,14,9,10,7,8 ,3,1,4,2]
雖然未排序的我:
[16,14,8,9,10,2,3,4,7,1]
爲什麼或爲什麼不是MAX-受數組排序影響的heapify?
我發現,當該陣列被排序的解決辦法是:
[16,14,10,8,7,9,3,2,4,1]
爲什麼當數組排序時,我是否得到了不同的解決方案,即使我發現我的實現是正確的,根據CLRS中的僞代碼?
你能指定,同時實現相同的功能,不使用遞歸另一個程序?
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);
}
}
我真的問爲什麼,因爲它預期的代碼不被執行。 –