我写的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);
}
}
我真的问为什么,因为它预期的代码不被执行。 –