我基本上试图通过将数字插入到正确的位置来动态地对数字输入进行排序(不是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;
}
}
}
当我运行此代码时,我得到一个内存不足异常。我只是想了解我在上面的代码中做错了什么。如果我使用拼接方法错误并且它是内存泄漏的原因,那么实际发生了什么? 我知道还有其他方法可以进行这种排序,但我对使用javascript数组进行插入排序特别感兴趣。
答案 0 :(得分:3)
在else
条件下,您需要添加数组,使其更长一些。这意味着当循环接下来检查powers.length
时,它将是一个更高的数字,这意味着您将再次进入循环体,这意味着您将再次添加到数组中,这意味着您和&# #39;再次回到循环体,这意味着......你会看到它的发展方向。 : - )
一旦您将数字添加到数组(无论哪个分支),退出循环(例如,使用break
)。
附注:如果您在j
处开始i
,则不会像现在一样进行正确的插入排序。 i
只是计算用户说他们要输入的条目数,它不属于此类。考虑一下:如果我输入8然后输入4,该怎么办?如果您在j
处开始i
,那么您将跳过8并将4放在错误的位置。 j
需要从0开始。