题目描述
已知两个升序数组,将它们合并成一个升序数组并输出。例如:数组array1={3,6,13,35,54},数组array2={14,19,26,32},
合并为新的数组array={3,6,13,14,19,26,32,35,54}。
输入格式:
输入两行升序整数,当每行输入0时,表示输入结束。每行整数的个数1<=N<=10。
输出格式:
输出合并后的升序数组。(最后一个数据后有一个空格)
输入样例:
在这里给出一组输入。例如:
3 6 13 35 54 0
14 19 26 32 0
输出样例:
在这里给出相应的输出。例如:
3 6 13 14 19 26 32 35 54
代码:
#include <stdio.h>
void merge(int array1[], int n1, int array2[], int n2, int array3[]){
int i = 0, j = 0, k = 0;
while (i < n1 && j < n2){ //这个循环用于比较两个数组中的元素
if (array1[i] <= array2[j]) //并将较小的元素存储到 array3
array3[k++] = array1[i++];//当其中一个数组的所有元素都被处理后,循环终止
else
array3[k++] = array2[j++];
}
while (i < n1) //这两段代码分别处理 array1 和 array2 中剩余的元素
array3[k++] = array1[i++];//(如果有的话)这些元素之前没有被放入 array3
while (j < n2) //因为它们大于 array3 中已经存在的所有元素
array3[k++] = array2[j++];//但是现在,我们将它们添加到 array3 的末尾
}
int main(){
int array1[10], array2[10], array3[20];
int n1, n2, i;
for (i = 0; i < 10; i++){
scanf("%d", &array1[i]);
if (array1[i] == 0)
break;
}
n1 = i;
for (i = 0; i < 10; i++){
scanf("%d", &array2[i]);
if (array2[i] == 0)
break;
}
n2 = i;
merge(array1, n1, array2, n2, array3);
for (i = 0; i < n1 + n2; i++)
printf("%d ", array3[i]);
return 0;
}