1124: 两个有序数组合并
时间限制: 1 Sec 内存限制: 128 MB
提交: 12599 解决: 4941
[状态] [讨论版] [提交] [命题人:admin]
题目描述
已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。
输入
输入有两行,第一行首先是一个正整数m,然后是m个整数;第二行首先是一个正整数n,然后是n个整数,m, n均小于等于1000000。
输出
输出合并后的m+n个整数,数据之间用空格隔开。输出占一行。
样例输入 Copy
4 1 2 5 7
3 6 4 2
样例输出 Copy
7 6 5 4 2 2 1
提示
试图排序的孩子们要小心了~~~~~~
数据结构里方法讲的很清楚
#include<stdio.h>
int main()
{
int a[1000],b[1000],c[10000];
int m,n,i,j,temp,k;
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&b[i]);
}
for(i=0,j=m-1;j>i;i++,j--)//将数组a逆序
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
i=j=k=0;
while(i<m&&j<n)//公共部分比较排序
{
if(a[i]>b[j])
{
c[k]=a[i];
k++;
i++;
}
else
{
c[k]=b[j];
k++;
j++;
}
}
while(i<m)//数组a有剩余,把剩余部分接入数组c
{
c[k]=a[i];
i++;
k++;
}
while(j<n)//数组b有剩余,把剩余部分接入数组c
{
c[k]=b[j];
j++;
k++;
}
for(k=0;k<m+n;k++)//输出数组c
{
printf("%d ",c[k]);
}
getchar();
printf("\n");
return 0;
}