题目描述 已知数组a中有m个按升序排列的元素,数组b中有n个按降序排列的元素,

编程将a与b中的所有元素按降序存入数组c中。输入输入有两行,第一行首先是一个正整数m,然后是m个整数;第二行首先是一个正整数n,然后是n个整数,m,n均小于等于10000... 编程将a与b中的所有元素按降序存入数组c中。
输入

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

输出

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

样例输入
4 1 3 5 7
3 6 4 2

样例输出
7 6 5 4 3 2 1

一边比大小一边代入第三个数组该怎么弄?
展开
 我来答
风若远去何人留
2014-02-21 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450126
专业C/C++软件开发

向TA提问 私信TA
展开全部

由于输入的两组数字都不是有序的

所以可以有三种方式供选择

第一种,边输入 边插入排序 代码相对简单 

第二种,分别输入 排序 再一起组合 空间复杂度高

第三种,整体输入 一并排序 这种效率最高

按第一种方式 代码如下

#include <stdio.h>
int a[2000000];
int main()
{
int m, n;
int i, j,t;
scanf("%d", &m);
for(i = 0; i < m; i ++)
{
scanf("%d", &t);
for(j = i-1; j >= 0; j --)
{
if(a[j] >= t) break;
a[j + 1] = a[j];
}
a[j + 1] = t;
}

scanf("%d", &n);
for(i = m; i < m+n; i ++)
{
scanf("%d", &t);
for(j = i-1; j >= 0; j --)
{
if(a[j] >= t) break;
a[j + 1] = a[j];
}
a[j + 1] = t;
}
for(i = 0; i < m+n-1; i ++)
printf("%d ", a[i]);
printf("%d\n", a[i]);
return 0;
}
更多追问追答
追问
题目要求说是将输入的两组数先分别存入两个数组在存入第三个数组,一组数组是升序,一组是降序,我之前试过将两个数组先存入在冒泡排序,耗时太大。。
追答
可以试试仿照我发的程序 进行插入 不过时间开销也不小
也可以试试先存入数组 然后快排
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式