问题描述
现有两个数组 A 和 B,数组 A 是升序排序的有序数组,数组 B 是降序排序的有序数组,要求把这两个数组合并为一个升序排序的有序数组。
输入
第一行输入 N(1 <= N <= 100) 和 M(1 <= M <= 100),分别代表数组 A 和 B 的长度。
第二行输入 N 个数,代表数组 A 。
第三行输入 M 个数,代表数组 B 。
输出
输出一行合并后的数组。
输入范例
3 4 2 3 5
6 4 2 1
输出范例
1 2 2 3 4 5 6
clew:
解决方法有多种,在这里我用边比较边输出的方式。由于我在网上搜索无果,于是想了一个晚上的时间想到一种不使用第三个数组解题的方法。在这里给大家提供一些参考。
1.将一个数组全部比较输出,再输出剩余的数组。由于2个数组都是有序,但一个为升序,一个为降序。所以在一开始输入时便将降序的数组逆着输入数组。
2.判断数组是否输出完。
3.判断大小
code:
#include"stdio.h" int main() { int a[105],b[105]; int i; int n,m; scanf("%d%d",&n,&m); if(n<0||m<0) { return 0; } for(i=0;i<n;i++) { scanf("%d",&a[i]); } for(i=m-1;i>=0;i--) { scanf("%d",&b[i]); } int j=0; while(i<n||j<m) { if(a[i]<=b[j]&&i<n) { printf("%d ",a[i]); i++; } if(a[i]>b[j]&&j<m) { printf("%d ",b[j]); j++; } if(i>=n&&j<m) { printf("%d ",b[j]); j++; } if(i<n&&j>=m) { printf("%d ",a[i]); i++; } } printf("\n"); return 0; }
ps:如有更好的见解,欢迎提出。