c++ 对有序数组进行合并

对两个有序数组进行合并:设有数组A、B,数组元素的值是数字,如下所示,并假设两个数组的元素都已经有序(从大到小降序排列),且分别保存在各自的文件中。编程序,合并A、B数组形成一个新的数组C,并使C的元素仍有序(从大到小降序排列),并将排序结果保存到新文件中。
示例 : 假设有int A[10]={123,88,86,86,33,15,7,0,-1,-3};int B[10]={86,69,51,50,27,19,15,12,5,2};

运行结果及代码如下,如有帮助,望采纳。

img

img

代码:

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    int a[10],b[10],c[20],i,j,t;
    ifstream fa("a.txt"); 
    ifstream fb("b.txt");
    ofstream fc("c.txt");
    if(!fa.is_open())
    {
        cout << "文件a打开失败";
        return 0;
    }
    if(!fa.is_open())
    {
        cout << "文件b打开失败";
        return 0;
    }
    //读取文件A
    i = 0;
    while(!fa.eof())
    {
        fa >> a[i];
        i++;
        if(i>=10) break;
    }
    fa.close();
    //读取文件b
    i=0;
    while(!fb.eof())
    {
        fb >> b[i];
        i++;
        if(i>=10) break;
    }
    fb.close();
    
    //显示数组a和数组b
    for(i=0;i<10;i++)
        cout << a[i]<<" ";
    cout << endl;
    for(i=0;i<10;i++)
        cout << b[i]<<" ";
    cout << endl;
    
    
    //合并数组
    t =0;
    for (i=0,j=0;i<10 || j<10;)
    {
        if(i<10 && j<10)
        {
            if(a[i]>b[j])
                c[t++]= a[i++];
            else
                c[t++]=b[j++];
        }else if (i==10 && j<10)
        {
            c[t++] = b[j++];
        }else if(i<10 && j==10)
            c[t++] = a[i++];
    }
    //输出c
    for(i=0;i<20;i++)
    {
        cout << c[i]<<" ";
        if(i<19)
            fc << c[i] << " ";
        else
            fc << c[i];
    }
    cout <<endl;
    fc.close();
    return 0;


}

直接插入排序就好了。