对两个有序数组进行合并:设有数组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};
运行结果及代码如下,如有帮助,望采纳。
代码:
#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;
}
直接插入排序就好了。