1124: 两个有序数组合并

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;
}
			
发布了27 篇原创文章 · 获赞 0 · 访问量 265

猜你喜欢

转载自blog.csdn.net/YGGZZZ/article/details/104728401