javascript - 汗学院:JavaScript循环时间过长-LMLPHP

我正在阅读可汗学院算法课程。我在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);


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

最佳答案

您是从rightIndex开始i并移动值array[i + 1],但是i到达array.length,并且insert通过将元素设置为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]);


但是,这仅在strict mode中起作用。如果您处于马虎模式,它只会掩盖错误。

关于javascript - 汗学院:JavaScript循环时间过长,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44411851/

10-08 20:55