将两个有序数组合并为一个新的有序数组

将2个已知有序的数组合并为一个新的有序数组。如下代码,已有两个数组 arr1 和 arr2,要求将两个数组中元素合并到数组 arr3 中,合并时要去除数组中的重复数据。在下面代码中的补全代码处,补全下面代码实现相应功能。在补全处可以定义新的变量来完成合并功能。

#include <stdio.h>

int main(void)
{
int arr1[] = {3,6,8,9,9,11,45};
int arr2[] = {1,3,6,8,45,89};
int arr3[100];
int i, len;

// 补全代码处

for (i=0; i<len; ++i)
{
    printf("%d ", arr3[i]);
}
printf("\n")
// 预期输出结果:1 3 6 8 9 11 45 89

return 0;

}

#include<stdio.h>
#include <stdio.h>

int main(void)
{
    int arr1[] = {3,6,8,9,9,11,45};
    int arr2[] = {1,3,6,8,45,89};
    int arr3[100];
    int i, len;

// 补全代码处
    int n=sizeof(arr1)/sizeof(int);
    int m=sizeof(arr2)/sizeof(int);
    int ap=0,bp=0,cp=0;
    for(int j=0; j<n+m; j++)
    {
        if(arr1[ap]==arr2[bp])
        {
            ap++;j++;
        }
        if(ap==n) {
            arr3[cp++]=arr2[bp++];
            continue;
        }
        if(bp==m) {
            arr3[cp++]=arr1[ap++];
            continue;
        }
        if(arr1[ap]<=arr2[bp]) arr3[cp++]=arr1[ap++];
        else arr3[cp++]=arr2[bp++];
    }
    len=cp;
    for (i=0; i<len; ++i)

    {

        printf("%d ", arr3[i]);

    }

    printf("\n");

// 预期输出结果:1 3 6 8 9 11 45 89

    return 0;

}

https://blog.csdn.net/weixin_44882124/article/details/123328753

你可以利用c++中的set容器,将两个数组的值都压进这个set容器,然后set容器会自动去重和排序,非常方便,具体使用你可以去搜一下。如有帮助,请点击采纳,谢谢