首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Heapsort不在Javascript中工作

Heapsort不在Javascript中工作
EN

Stack Overflow用户
提问于 2015-03-27 02:58:11
回答 1查看 2K关注 0票数 0

我试图在Javascript中实现堆排序,但是array.length - 2上有一个array.length - 2元素,索引0处的元素没有排序。以下是代码:

代码语言:javascript
复制
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 >= 1; i--) {
      maxHeap(array, i);
    }
  };
  buildHeap(array);
  for (var i = array.length; i >= 2; i--) {
    swap(array, 1, i);
    array.heapSize--;
    maxHeap(array, 1);
  }
};
var a = [55, 67, 10, 34, 25, 523, 1, -2];
heapSort(a);
document.getElementById("getHeapSort").innerHTML = a;
代码语言:javascript
复制
* {
  font-family: Arial, sans-serif;
}
代码语言:javascript
复制
<p id="getHeapSort"></p>

我想array[i] == undefinedi = array.length。我试着修复它(设置i = array.length - 1__),但是数组以完全不同的顺序出现。我还认为0从来没有被交换,因为我总是大于0。我再试一次,数组以完全不同的顺序出现。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-27 03:22:56

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

试试这个:

代码语言:javascript
复制
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);

下面是一个JFiddle:http://jsfiddle.net/mbL5enL5/1/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29292558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档