有序序列的合并(数组)
时间限制: 1s
类别: DS:数组与链表->数组
问题描述
使用数组编程:
有两个非递减有序序列,将它们合并成一个非递减有序序列。
注意:编程时要利用到“有序”这个条件,从而降低时间复杂度。
输入说明
第一行输入序列A:
第一个整数m(0<=m<=100),表示序列A共有m个元素,其后有m个整数,表示序列A的元素
第二行输入序列B:
第一个整数n(0<=n<=100),表示序列B共有n个元素,其后有n个整数,表示序列B的元素
输出说明
输出合并后的序列,数字之间以一个空格分隔。
#include<iostream>
using namespace std;
int main()
{
int n,m;
int j=0;
int h=0;
int a[101];
int b[101];
//输入
cin >> n;
int ini=n;
for(int i=0; i<n; ++i) cin>>a[i];
cin>>m;
for(int i=0; i<m; ++i) cin>>b[i];
for(int i=0; i<m; ++i)//b
{
for(int k=0; k<n; ++k)//a
{
if(b[i]<a[0])
{
++n;
for(h=n-1; h>0; --h)
a[h]=a[h-1];
a[0]=b[i];
break;
}
if(b[i]>=a[k]&&b[i]<=a[k+1])
{
++n;
for(j=n-1; j>=(k+1); --j)
{
a[j]=a[j-1];
}
a[j+1]=b[i];
break;
}
if(b[i]>a[n-1])
{
++n;
for(int p=n-1; p<(m+ini); ++p)
a[p]=b[i];
break;
}
}
}
for(int i=0; i<n; ++i)
{
cout<<a[i];
if(i<n-1) cout<<" ";
}
return 0;
}