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

来源:互联网 发布:新网域名登录 编辑:程序博客网 时间:2024/06/01 10:44

要求算法在最坏的情况下所用的计算时间为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++];
    }

}
0 0
原创粉丝点击