合并有序数组。编写一个程序,将两个元素从小到大有序的一维数组归并成一个有序的一维数组。
要求:
【输入形式】用户在第一行输入第一个有序数组的元素数目,以回车结束此输入。然后在第二行按照刚才输入的元素数目依次输入数组元素,中间用空格分隔,最后用回车结束输入。第三行和第四行只需重复刚才的步骤,将第二个有序数组也输入即可。输入时候一定是有序输入的,即数组元素已经按照从小到大顺序排列。
【输出形式】程序将两个有序一维数组合并为一个有序数组并按照从小到大顺序输出。每个元素输出时用空格分隔,最后一个输出之后没有空格。
【样例输入】62 5 8 11 20 3541 6 15 60
【样例输出】1 2 5 6 8 11 15 20 35 60
【样例说明】第一行输入为第一个有序数组的元素数目,第二行为有序数组元素;第三行为第二个有序数组的元素数目,第四行为有序数组元素。
#include <stdio.h>
int main()
{
int n1,n2,i,j,t;
int a[100],b[100],c[200]; //假设a,b为两有序数组且足够大
scanf("%d",&n1);
//输入数组a,并且将其中的元素赋给数组c的前n1个元素
for(i=0,j=0;i<n1;i++,j++)
{
scanf("%d",&a[i]);
c[j]=a[i];
}
scanf("%d",&n2);
//输入数组b,并且将其中的元素赋给数组c的后n2个元素
for(i=0,j=n1;i<n2;i++,j++)
{
scanf("%d",&b[i]);
c[j]=b[i];
}
//冒泡法,重新给数组c排序
for(i=0;i<n1+n2-1;i++)
{
for(j=0;j<n1+n2-1-i;j++)
if(c[j]>c[j+1])
{
t=c[j];
c[j]=c[j+1];
c[j+1]=t;
}
}
//打印出顺序数组
for(j=0;j<n1+n2;j++)
printf("%d ",c[j]);
return 0;
}