我试图使用pop()来改善典型的合并排序功能的时间。当我在Chrome中运行它时,它会因内存错误而崩溃。显然这意味着它在没有完成的情况下循环,但我无法说明原因。
以下是代码:
function mergeSorted(a, b){
var c = [];
while(a.length && b.length){
var a1 = a.pop();
var b1 = b.pop();
var aIndex = parseInt((a.length) - 1);
var bIndex = parseInt((b.length) - 1);
while(b[bIndex] >= a[aIndex]) c.push(b1);
while(a[aIndex] >= b[bIndex]) c.push(a1);
}
return c;
}
var a = [1, 3, 5, 7, 7, 8, 8, 9, 9];
var b = [2, 4, 5, 6, 7, 8, 9];
mergeSorted(a, b);
答案 0 :(得分:4)
您的最后两个while
循环应该是if
条件,因为您不会在循环内部更改任何while
循环条件,因此将无限循环。< / p>
if(b[bIndex] >= a[aIndex]) c.push(b1);
if(a[aIndex] >= b[bIndex]) c.push(a1);