尝试合并两个数组,同时排序到第三个数组

时间:2014-03-28 02:11:30

标签: javascript arrays

我有一个基本上是两个数组的作业必须分成一个。这有一个警告,即不合并然后排序。换句话说,我必须同时浏览两个数组,然后从中生成第三个数组,这是排序的。我有点困惑的是如何同时搜索两个数组,并寻找最低值并将其移动到第三个数组。

有人能告诉我一个如何做到这样的事情的例子吗?我很困惑。

谢谢大家。

以下是一些细节。

•调用函数时不应更改两个参数数组。总的来说这是一个很好的做法。 •您可能不会简单地附加两个数组,然后对结果进行排序。相反,你应该依次检查数组的每个元素,看看哪个更小。 •使用正确的内容返回新创建的数组。 •执行算法的时间应与两个输入数组中元素数量的总和成正比。

是的,数组是排序的,但是我必须经历并找到两个数组中最低的值,然后将它添加到第三个数组,然后是两个数组中的第二个最低值,并且等等......

2 个答案:

答案 0 :(得分:1)

如果两个数组已经排序,并且您将它们排序为空数组, 没有比最简单的方法更快的方法 -

function insorter(A, B){
    var C= [], LA= A.length, LB= B.length, i= 0, j= 0, k= 0;
    while(i<LA && j<LB){
        while(A[i]<B[j]){
            C[k++]= A[i++];
        }
        while(B[j]<= A[i]){
            C[k++]= B[j++];
        }
    }
    if(i<LA) C.splice(k, 0,A.slice(i));
    else if(j<LB) C.splice(k, 0,B.slice(j));
    return C;
}


var a= [10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49], 
b= [0, 3.5, 7, 10.5, 14, 17.5, 21, 24.5, 28, 31.5, 35, 38.5];
insorter(a, b);

/ *返回值:(数组) 0,3.5,7,10,10.5,13,​​14,16,17.5,19,21,22,24.5,25,28,28,31,31.5,34,35,37,38.5,40,43,46, 49 * /

答案 1 :(得分:-1)

http://www.w3schools.com/jsref/jsref_concat_array.asp

然后使用.sort()方法,我不明白你的意思是你必须同时通过2个数组。