两个已知升序数组合并成一个升序数组,重复数字只保存一次

两个已知升序数列合并成一个新升序数列并去重
我的想法是利用第三个数组来存放两个数组的元素,然u后排序,最后再去重。但是结果显然错误的,没有显示b数组的元素
请大家帮我看一下,谢谢!


int merge(int n,int a[],int m,int b[]){
    int c[100],i,j;
    //合并
    for(i=0;i<n;i++){c[i]=a[i];}
    for(i=n;i<n+m;i++){c[i]=b[i-n];}
    
    //排序
    int temp;//中间变量
    for(i=0;i<n+m;i++){
        for(j=0;j<n+m;j++){
            if(c[j]>c[j+1]){
                temp=c[j+1];
                c[j+1]=c[j];
                c[j]=c[j+1];
            }
        }
    
    }

    //去重
    for(i=0;i<n+m;i++){
        if(a[i]==a[i+1]){
            for(j=i;a[j];j++)a[j]=a[j+1];
        }
    }

    //输出新数组
    for(int k=0;k<n+m;k++){cout<<c[k]<<" ";}
    return 0;
}


void main(){
    int a[10]={1,2,3,4,5,6,8,18,19,23};
    int b[10]={5,6,7,11,13,16,18,19,20,21};
    merge(10,a,10,b);
    cout<<endl;

    system("pause");
}
  • 排序有问题的
  • 去重也有问题

改了一下代码,参考如下:

#include<iostream>
#include<string>
using namespace std;
int merge(int n,int a[],int m,int b[]){
    int c[100],i,j;
    int d[1000] = {0}; // 检测重复数字
    //合并
    int size = 0;
    for(i=0;i<n;i++)
    {
        if (d[a[i]] == 1) 
            continue;
        c[size++]=a[i];
        d[a[i]] = 1;
    }
    for(i=n;i<n+m;i++)
    {
        if (d[b[i-n]] == 1) 
            continue;
        c[size++]=b[i-n];
        d[b[i-n]] = 1;
    }
    
    //排序
    int temp,noswap;
    for(i=0;i< size-1; i++)
    {
        noswap=1;
        for(j=size-1;j>i;j--)
            if(c[j-1]>c[j])
            {
                temp=c[j-1];
                c[j-1]=c[j];
                c[j]=temp;
                noswap=0;
            }
        if(noswap)    
            break;
    }

    //去重
    // for(i=1;i<n+m;i++){
    //     if(c[i]==c[i-1]){
    //         for(j=i;j<n+m;j++)
    //             c[j-1]=c[j];
    //     }
    // }

    //输出新数组
    for(int k=0;k<size;k++){cout<<c[k]<<" ";}
    return 0;
}


int main(){
    int a[10]={1,2,3,4,5,6,8,18,19,23};
    int b[10]={5,6,7,11,13,16,18,19,20,21};
    merge(10,a,10,b);
    cout<<endl;

    system("pause");
}

img


如有帮助,欢迎采纳哈!