Haut OJ1124: 两个有序数组合并

  • Post author:
  • Post category:其他


题目描述:

已知数组a中有m个按升序排列的元素,数组b中有n个按降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。

输入:

输入有两行,第一行首先是一个正整数m,然后是m个整数;第二行首先是一个正整数n,然后是n个整数,m, n均小于等于1000000。

输出:

输出合并后的m+n个整数,数据之间用空格隔开。输出占一行.。

输入样例

Copy

4 1 3 5 7

3 6 4 2

输出样例

Puts

7 6 5 4 3 2 1

提示



试图排序的孩子们要小心了~~~~~~

题解如下:

#include <stdio.h>
void PrintArr(int a[], int n);/*输出数组a的前n个元素*/

int a[1000000], b[1000000],c[2000010];
int main()
{
	
	int m, n;
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &a[i]);
	
	}
	scanf("%d", &m);
	for (int i = 0; i < m; i++)
	{
		scanf("%d", &b[i]);
	}
	int d = m + n;
	
		int j = 0;
	for (int i=0;i<d;i++)
	{
		if (a[n - 1] > b[j])
		{
			c[i] = a[n - 1];
			n--;
		}
		else if(a[n-1]<b[j])
		 {
			c[i] = b[j];
			j++;
		}
		else if(a[n - 1] == b[j])
		{
			c[i] = a[n - 1];
			c[i + 1] = b[j];
			n--; j++;
			i++;
		}
	}
	/*int tem; int flag = 0;
	for (int i = 0; i < d - 1; i++)
	{
		for (int j = 0; j < d - 1 - i; j++)
		{
			if (c[j] <= c[j + 1])
			{
				tem = c[j + 1];
				c[j + 1] = c[j];
				c[j] = tem;
				flag = 1;
			}
		}
		if(flag==0)
			break;
	}*/
	PrintArr(c, d);
	return 0;
}
void PrintArr(int a[], int n)/*输出数组a的前n个元素*/
{
	int x;
	printf("%d", a[0]);
	for (x = 1; x <= n - 1; x++)
		printf(" %d", a[x]);

}

/* 这里简单补充下自己做题过程中所查阅的资料 栈内存,系统默认值为最大1Mb, 最大可以申请1024*1024/4=264144个,堆栈溢出 方法一:申明为全局变量 方法二:存放在堆上*/

本题不能采用冒泡排序,否则时间会超限。

如果看到了任何的问题和留言都会及时回复,请积极互动o!



版权声明:本文为qq_73625278原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。