javascript - 可汗学院 : JavaScript loop taking too long

标签 javascript khan-academy

enter image description here

我正在阅读可汗学院的算法类(class)。我在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);

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

最佳答案

您从 i 开始 rightIndex 并移动值 array[i + 1],但是 i code> 达到 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]);

这只适用于 strict mode不过。如果你处于草率的模式,它只会隐藏错误。

关于javascript - 可汗学院 : JavaScript loop taking too long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44411851/

相关文章:

javascript - WordPress:在 function.php 中排队后,javascript 未加载

javascript - 可汗学院算法挑战 : Binary Search

javascript - 如何修复 "An unbalanced tree was written using document.write() causing data from the network to be reparsed"?

javascript - 如何让我的 jQuery 函数适用于 foreach 循环内的每个元素?

javascript - Safari 扩展 safari.application 错误

javascript - 为什么我的算法无法在我的数组中找到索引?

javascript - window.opener 在 firefox 中为 null

javascript - 图像文件到可汗学院代码

latex - 具有 MathJax 或类似功能的 Virtual Latex 数学键盘