编写C语言程序实现单步归并程序排序,输入包括三行,第一行包含两个正整数n,m,表示两个有序列的长度,第二行和第三行分别包含n个整数和m个整数,表示两个有序列(要求从小到大),输出为一行,表示合并后包含n+m个整数的有序列
时间: 2023-06-20 07:04:28 浏览: 91
关于C语言程序的调试ppt课件.ppt
以下是用C语言实现单步归并程序排序的代码:
```c
#include <stdio.h>
void merge(int arr1[], int arr2[], int n, int m) {
int i = 0, j = 0, k = 0;
int merged[n + m];
while (i < n && j < m) {
if (arr1[i] <= arr2[j]) {
merged[k++] = arr1[i++];
} else {
merged[k++] = arr2[j++];
}
}
while (i < n) {
merged[k++] = arr1[i++];
}
while (j < m) {
merged[k++] = arr2[j++];
}
for (int l = 0; l < n + m; l++) {
printf("%d ", merged[l]);
}
}
int main() {
int n, m;
scanf("%d %d", &n, &m);
int arr1[n], arr2[m];
for (int i = 0; i < n; i++) {
scanf("%d", &arr1[i]);
}
for (int i = 0; i < m; i++) {
scanf("%d", &arr2[i]);
}
merge(arr1, arr2, n, m);
return 0;
}
```
程序首先通过 `scanf()` 函数读取输入数据,分别为两个有序列的长度 `n` 和 `m`,以及两个有序列 `arr1` 和 `arr2`。然后调用 `merge()` 函数进行单步归并排序,并将排序后的合并序列输出。
在 `merge()` 函数中,使用三个指针 `i`、`j` 和 `k` 分别指向 `arr1`、`arr2` 和 `merged` 数组的当前元素位置。比较 `arr1[i]` 和 `arr2[j]` 的大小,将较小的元素存入 `merged[k]` 中,并将指向该元素的指针后移一位。重复上述步骤,直到 `arr1` 或 `arr2` 中的所有元素都被存入 `merged` 数组中。最后将 `merged` 数组中的元素依次输出即可。
阅读全文