描述:
输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
输入描述:
输入包含三行,
第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。
第二行包含n个整数,用空格分隔。
第三行包含m个整数,用空格分隔。
输出描述:
输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。
示例1
输入:
5 6 1 3 7 9 22 2 8 10 17 33 44输出:
1 2 3 7 8 9 10 17 22 33 44
解法思想:
首先定义一个数组(足够大),然后将第一个数表示的升序序列,依次存放在定义的数组中。再将第二个数表示的升序序列,存放在挨着第一组升序序列的后边。
最后再根据一 一遍历 数组中存放的数据,外层循环是比较的次数,内层循环一一比较大小,如果前者大于后者,则交换这两个数的位置。
代码展示:
#include <stdio.h>
int main() {
int n,m;
int arr[2000];
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++){
scanf("%d",&arr[i]);
}
for(int j=n;j<m+n;j++){
scanf("%d",&arr[j]);
}
for(int k=0;k<n+m;k++){
for(int z=0;z<n+m-k-1;z++){
if(arr[z]>arr[z+1]){
int tamp=arr[z];
arr[z]=arr[z+1];
arr[z+1]=tamp;
}
}
}
for(int i=0;i<n+m;i++){
printf("%d ",arr[i]);
}
return 0;
}