对两个有序数组进行合并:设有数组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};
2条回答 默认 最新
- 技术专家团-小桥流水 2021-12-14 12:31关注
运行结果及代码如下,如有帮助,望采纳。
代码:
#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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报