问题描述 :
使用数组编程:
有两个非递减有序序列,将它们合并成一个非递减有序序列。
注意:编程时要利用到“有序”这个条件,从而降低时间复杂度。
输入说明 :
第一行输入序列A:
第一个整数m(0<=m<=100),表示序列A共有m个元素,其后有m个整数,表示序列A的元素
第二行输入序列B:
第一个整数n(0<=n<=100),表示序列B共有n个元素,其后有n个整数,表示序列B的元素
输出说明 :
输出合并后的序列,数字之间以一个空格分隔。
输入范例 :
5
1 3 3 7 9
8
1 2 3 4 5 6 9 11
输出范例 :
1 1 2 3 3 3 4 5 6 7 9 9 11
解题思路:
再找一个辅助变量,来进行b的推进。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <vector>
using namespace std;
int main()
{
int na,nb;
int a[200],b[200],c[300];
int i,j;
cin>>na;
for(i=0;i<na;i++)
cin>>a[i];
cin>>nb;
for(i=0;i<nb;i++)
cin>>b[i];
int p=0,t=0;
for(i=0;i<na;i++)
{
while(b[p]<a[i] && p<nb)
c[t++]=b[p],p++;
c[t++]=a[i];
}
while(p<nb)
c[t++]=b[p],p++;
for(i=0;i<t-1;i++)
cout<<c[i]<<" ";
cout<<c[i]<<endl;
return 0;
}