描述
输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
数据范围: 1≤𝑛,𝑚≤1000 1≤n,m≤1000 , 序列中的值满足 0≤𝑣𝑎𝑙≤30000 0≤val≤30000
输入描述:
输入包含三行,
第一行包含两个正整数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 a, b ;
scanf("%d %d ", &a, &b); //定义两个数组长度
int i,j = 0;
int arrA[2000] = {}; //合并数组长度
int temp;
for ( i = 0; i < a; i++)
{
scanf("%d ", &arrA[i]); //写入第一个数组
}
for (i = a; i < a+b; i++) // i=a 开始循环,将第二个数组并入第一个数组
{
scanf("%d ", &arrA[i]);
}
for ( i = 0; i < a+b; i++)
{ //冒泡排序
for ( j = 0; j < a+b-i-1; j++) /* 其中 j<a+b-i-1 是arr[j]排好序前要跟数组后续
其他元素相比较的数量 */
{
if (arrA[j] > arrA[j+1]) {
temp = arrA[j];
arrA[j] = arrA[j+1];
arrA[j+1] = temp;
}
}
}
for ( i = 0; i < a+b; i++)
{
printf("%d ", arrA[i]); //输出合并并排好序的数组
}
}