简单的归并

作者在 2013-10-16 12:45:26 发布以下内容
Problem Description 

已知数组A和B各有m,n个元素,且元素按值非递减排列,现要求把A和B归并为一个新的数组C,且C中的数据元素仍然按值非递减排列。例:
A=(3,5,8,11)
B=(2,6,8,9,11,15,20)

C=(2,3,5,6,8,8,9,11,11,15,20)

Input

输入数据首先包含一个整数T,表示测试实例的个数,然后是T组测试数据。
每组测试数据占两行,其中第1行首先是A的元素个数m,之后是m个元素。第2行首先是B的元素个数n,之后是n个元素。(1<=m,n<=100)

Output

对于每组测试数据。分别输出将A、B合并后的数组C的全部元素。元素之间以空格分隔,最后一个数据之后没有空格。

Sample Input
2
2 1 2
1 3
4 3 5 8 11
7 2 6 8 9 11 15 20
Sample Output
1 2 3
2 3 5 6 8 8 9 11 11 15 20
#include<iostream>
using namespace std;
int main()
{
 int t,m,n,tem,a[200];
 cin>>t;
 for(int i=0;i<t;i++)
 {
  cin>>m;
  for(int j=0;j<m;j++)
  {
   cin>>a[j];
  }
  cin>>n;
  for(int x=m;x<m+n;x++)   //直接从第m个数开始,接着原来的集合往里出入元素,至于为什么是n+m,可以用实际的例子来试试。
  {
   cin>>a[x];
  }
 for(int b=0;b<m+n-1;b++)     //此处的m+n-1是因为,两个数进行比较的话就只比较了m+n-1次,也就是循环进行了n+m-1次。
  {
   for(int c=0;c<m+n-b-1;c++)    //这里进行的循环,首先进行外循环,然后在进行内循环,当内循环进行结束时,在回到外循环,让第一个数与第二个数进行比较,当第一个数比后者大时,吧第一个数赋予第二个数,进行类似的循环。
   {
    if(a[c]>a[c+1])
    {
     tem=a[c];
     a[c]=a[c+1];
     a[c+1]=tem;
    }
   }
  }
/*  for(int d=0;d<m+n;d++)
  {
   cout<<a[d];               //这里的循环用来进行输出的
   if(d<m+n-1)              //这里进行的是,输出数字之间会有几个空格,通过if选择来控制
    cout<<' ';          //因为有n+m个数,所以只需有n+m-1个空格就行了
  }*/
  cout<<endl;
 }
 return 0;
}
默认分类 | 阅读 2576 次
文章评论,共0条
游客请输入验证码
浏览19539次
文章分类
最新评论