Heapsort不在Javascript中工作

Heapsort不在Javascript中工作,javascript,algorithm,heapsort,max-heap,Javascript,Algorithm,Heapsort,Max Heap,我试图用Javascript实现heapsort,但是array.length-2处有一个未定义的元素,索引0处的元素未排序。 代码如下: var heapSort=函数(数组){ 变量交换=函数(数组、第一索引、第二索引){ var temp=数组[firstIndex]; 数组[firstIndex]=数组[secondIndex]; 数组[secondIndex]=temp; }; var maxHeap=函数(数组,i){ var l=2*i; var r=l+1; var最大; if

我试图用Javascript实现heapsort,但是
array.length-2处有一个
未定义的
元素,索引0处的元素未排序。
代码如下:

var heapSort=函数(数组){
变量交换=函数(数组、第一索引、第二索引){
var temp=数组[firstIndex];
数组[firstIndex]=数组[secondIndex];
数组[secondIndex]=temp;
};
var maxHeap=函数(数组,i){
var l=2*i;
var r=l+1;
var最大;
if(l数组[i]){
最大=l;
}否则{
最大=i;
}
if(r数组[最大]){
最大=r;
}
如果(最大!=i){
交换(数组,i,最大);
最大堆(数组,最大);
}
};
var buildHeap=函数(数组){
array.heapSize=array.length;
对于(var i=Math.floor(array.length/2);i>=1;i--){
maxHeap(数组,i);
}
};
构建堆(数组);
对于(var i=array.length;i>=2;i--){
交换(数组,1,i);
array.heapSize--;
maxHeap(数组,1);
}
};
VarA=[55,67,10,34,25523,1,-2];
希普索尔(a);
document.getElementById(“getHeapSort”).innerHTML=a
*{
字体系列:Arial,无衬线;
}

您在JavaScript中使用的是基于1的索引,而不是基于0的索引。为了您的方便,我还添加了一个跟踪

试试这个:

var heapSort = function(array) {
  var swap = function(array, firstIndex, secondIndex) {
    var temp = array[firstIndex];
    array[firstIndex] = array[secondIndex];
    array[secondIndex] = temp;
  };
  var maxHeap = function(array, i) {
    var l = 2 * i;
    var r = l + 1;
    var largest;
    if (l < array.heapSize && array[l] > array[i]) {
      largest = l;
    } else {
      largest = i;
    }
    if (r < array.heapSize && array[r] > array[largest]) {
      largest = r;
    }
    if (largest != i) {
      swap(array, i, largest);
      maxHeap(array, largest);
    }
  };
  var buildHeap = function(array) {
    array.heapSize = array.length;
    for (var i = Math.floor(array.length / 2); i >= 0; i--) {
      maxHeap(array, i);
    }
  };
  buildHeap(array);
  for (var i = array.length-1; i >= 1; i--) {
    swap(array, 0, i);
    array.heapSize--;
    maxHeap(array, 0);

    document.getElementById("getHeapSort").innerHTML = document.getElementById("getHeapSort").innerHTML + a + "<br>";
  }
};
var a = [55, 67, 10, 34, 25, 523, 1, -2];
document.getElementById("getHeapSort").innerHTML = a + "<br>";
heapSort(a);
var heapSort=函数(数组){
变量交换=函数(数组、第一索引、第二索引){
var temp=数组[firstIndex];
数组[firstIndex]=数组[secondIndex];
数组[secondIndex]=temp;
};
var maxHeap=函数(数组,i){
var l=2*i;
var r=l+1;
var最大;
if(larray[i]){
最大=l;
}否则{
最大=i;
}
if(rarray[max]){
最大=r;
}
如果(最大!=i){
交换(数组,i,最大);
最大堆(数组,最大);
}
};
var buildHeap=函数(数组){
array.heapSize=array.length;
对于(var i=Math.floor(array.length/2);i>=0;i--){
maxHeap(数组,i);
}
};
构建堆(数组);
对于(var i=array.length-1;i>=1;i--){
交换(数组,0,i);
array.heapSize--;
maxHeap(数组,0);
document.getElementById(“getHeapSort”).innerHTML=document.getElementById(“getHeapSort”).innerHTML+a+“
”; } }; VarA=[55,67,10,34,25523,1,-2]; document.getElementById(“getHeapSort”).innerHTML=a+“
”; 希普索尔(a);

这里有一个问题:

你没有问任何问题。