0

在此处输入图像描述

我正在阅读可汗学院的算法课程。我在https://www.khanacademy.org/computing/computer-science/algorithms/insertion-sort/p/challenge-implement-insertion-sort。到目前为止,我有:

var insert = function(array, rightIndex, value) {
for(var j = rightIndex;
    j >= 0 && array[j] > value;
    j--) {
    array[j + 1] = array[j];
}   
array[j + 1] = value; 
};

var insertionSort = function(array) {

for(var i= 1;  i < array.length ; i++ ) {
    insert(array, i ,array[i+1] );
}

};

var array = [22, 11, 99, 88, 9, 7, 42];
insertionSort(array);

您可以在屏幕截图中看到这行代码似乎是问题所在,但对我来说它看起来不错。我究竟做错了什么?

4

1 回答 1

1

您从 开始rightIndexi移动 value array[i + 1],但通过将元素设置为i到达array.lengthinsert开始rightIndex + 1。这将导致数组增长。

移动当前元素并从前一个索引开始:

for (var i = 1; i < array.length; i++) {
    insert(array, i - 1,array[i]);
}

调试时捕获此问题的一种方法是密封您的阵列,使其无法增长:

var array = Object.seal([22, 11, 99, 88, 9, 7, 42]);

不过,这只适用于严格模式如果您处于草率模式,它只会隐藏错误。

于 2017-06-07T11:57:31.833 回答