阳光博文 你的空间 知识的容器

合并两个已经排序的数组为另一个数组

要求算法在最坏的情况下所用的计算时间为O(n), 且只用到O(1)的辅助空间.


void MergeArray(int *pArray1, int nLen1, int *pArray2, int nLen2, int *pArray)
{
    int i, j, n;

    i = j = n = 0;
    while (i < nLen1 && j < nLen2)                  // 循环一直进行到拷贝完某一个数组的元素为止
    {
        if (pArray1[i] < pArray2[j])                // 拷贝array1的元素
        {
            pArray[n++] = pArray1[i++];
        }
        else if (pArray1[i] > pArray2[j])            // 拷贝array2的元素
        {
            pArray[n++] = pArray2[j++];
        }
        else                                          // 相等的元素拷贝
        {
            pArray[n++] = pArray2[j++];
            ++i;
        }
    }

    if (i == nLen1)                              // 如果array1已经被拷贝完毕就拷贝array2的元素
    {
        while (j < nLen2)
            pArray[n++] = pArray2[j++];
    }
    else                                         // 如果array2已经被拷贝完毕就拷贝array1的元素
    {
        while (i < nLen1)
            pArray[n++] = pArray1[i++];
    }

}



var a1=[1,3,5,36,56,58,59,60];
var a2=[3,6,13,17,45,46,59,60];

var merge2=function(a1,a2){
    var arr=[];
    var i1=0;
    var i2=0;
    var t1=a1[i1];
    var t2=a2[i2];
    for(var i=0,l=(a1.length+a2.length);i<l;i++){
        if((t1<t2||typeof t2=="undefined")&&t1){
               arr.push(t1);
               t1=a1[++i1];
        }
        if((t2<t1||typeof t1=="undefined")&&t2){
                arr.push(t2);
                t2=a2[++i2];
        }
        if(t1==t2&&t1&&t2){
            arr.push(t1);
            t1=a1[++i1];
            t2=a2[++i2];
        }
    }
    return arr;
}

var a21=merge2(a1,a2);
console.log(a21);







在线咨询