编写C语言程序实现单步归并程序排序,输入包括三行,第一行包含两个正整数n,m,表示两个有序列的长度,第二行和第三行分别包含n个整数和m个整数,表示两个有序列(要求从小到大),输出为一行,表示合并后包含n+m个整数的有序列
时间: 2023-06-20 15:04:33 浏览: 95
以下是单步归并程序排序的C语言实现:
```c
#include <stdio.h>
void merge(int arr1[], int n, int arr2[], int m, int result[]) {
int i = 0, j = 0, k = 0;
while (i < n && j < m) {
if (arr1[i] < arr2[j]) {
result[k++] = arr1[i++];
} else {
result[k++] = arr2[j++];
}
}
while (i < n) {
result[k++] = arr1[i++];
}
while (j < m) {
result[k++] = arr2[j++];
}
}
int main() {
int n, m, i;
scanf("%d %d", &n, &m);
int arr1[n], arr2[m], result[n + m];
for (i = 0; i < n; i++) {
scanf("%d", &arr1[i]);
}
for (i = 0; i < m; i++) {
scanf("%d", &arr2[i]);
}
merge(arr1, n, arr2, m, result);
for (i = 0; i < n + m; i++) {
printf("%d ", result[i]);
}
printf("\n");
return 0;
}
```
在这个程序中,我们首先定义了一个 `merge` 函数,该函数接受两个有序数组和它们的长度作为参数,将它们合并为一个有序数组,并将结果存储在第三个数组中。在主函数中,我们读入两个数组的长度和它们的值,然后调用 `merge` 函数并输出结果。
注意,这个程序中没有使用递归,而是使用了一个 while 循环来实现归并排序。每次循环中,我们比较两个数组的当前元素,将较小的元素添加到结果数组中,并将指向该元素的指针向前移动一位。当两个数组中的一个已经被遍历完了,我们将剩下的另一个数组中的元素添加到结果数组中。最后,我们输出结果数组。
阅读全文