题目描述:
用合并的方法把两个有序数列A、B合并为一个新的有序数列C,不得先合并再排序。提示:从A和B中取小的数进行比较,把两者小的数放到C中,一直继续此操作。
输入格式:
第一行m和n,表示A数列有m个数,B数列有n个数。
第二行m个从小到大的数
第三行n个从小到大的数
输出格式:
输出共一行有m+n个有序的数列,两个数之间用一个空格隔开。
样例输入:
5 3 10 20 30 40 50 12 18 36
样例输出:
10 12 18 20 30 36 40 50
提示:
m+n<=1500000
题中任意一个数,均 <= 109
不能混合后排序完成,否则做此题就失去意义了。
时间限制: 1000ms
空间限制: 128MB
代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[1500001],b[1500001],c[1500001];
int main(){
int m,n,x,s=0,s1=0,z=0;
cin>>m>>n;
for(int i=0;i<m;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
cin>>b[i];
}
for(int i=0;i<m+n;i++){
if(s>=m){
c[z]=b[s1];
s1++;
z++;
}
else if(s1>=n){
c[z]=a[s];
s++;
z++;
}
else if(a[s]<=b[s1]){
c[z]=a[s];
s++;
z++;
}else if(a[s]>b[s1]){
c[z]=b[s1];
s1++;
z++;
}
}
for(int i=0;i<m+n;i++){
cout<<c[i]<<" ";
}
return 0;
}