Javascript数组拼接导致内存不足异常

Javascript array splice causing out of memory exception?

本文关键字:内存不足 异常 数组 拼接 Javascript      更新时间:2023-09-26

我基本上试图通过将数字插入到正确的位置来对数字的输入进行排序(不是100%确定,但这应该是插入排序)。我的理解是,插入到一个数组在javascript中,你需要使用数组拼接方法http://www.w3schools.com/jsref/jsref_splice.asp。

我的代码试图实现我的目标如下:

var N = parseInt(readline());
var powers = [0];
for (var i = 0; i < N; i++) {
    var pi = parseInt(readline());
    for(var j=i;j<powers.length; j++ ){
        if(powers[j]>pi){
            powers.splice(j,0,pi);
        }
        else if(j+1==powers.length){
            powers[j+1]=pi;
        }
    }
}

当我运行这段代码时,我得到一个内存不足的异常。我只是想了解的是我在上面的代码做错了什么。如果我错误地使用了splice方法,并且它是内存泄漏的原因,那么实际发生了什么?我知道还有其他方法可以进行排序,但我特别感兴趣的是对javascript数组进行插入排序。

在您的else条件中,您正在添加数组,使其变长。这意味着当循环下一次检查powers.length时,它将是一个更大的数字,这意味着你将再次进入循环体,这意味着你将再次向数组中添加,这意味着你将再次回到循环体,这意味着……你知道这是怎么回事了。: -)

一旦将数字添加到数组中(无论哪个分支),退出循环(例如,使用break)。


旁注:如果您像目前一样在i处启动j,您将无法进行适当的插入排序。i只是计算用户说他们要输入的条目数,它不是排序的一部分。考虑一下:如果我先输入8,然后输入4会怎样?如果您从i开始j,您将跳过8并将4放在错误的位置。j需要从0开始