c语言编写:编写一个函数, 函数中的功能就是将已知的两个按升序排序的整型数列, 仍按照升序合并,在主函数中输入这两个已知的整型数列。
时间: 2024-10-16 08:21:59 浏览: 29
在C语言中,你可以通过动态内存分配和循环来合并两个已排序的整型数列。下面是一个简单的示例,展示了如何编写这个函数:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义合并两个已排序数组的函数
void merge_sorted_arrays(int* arr1, int* arr2, int n1, int n2, int* result) {
int i = 0, j = 0, k = 0;
while (i < n1 && j < n2) {
if (arr1[i] <= arr2[j]) {
result[k++] = arr1[i++];
} else {
result[k++] = arr2[j++];
}
}
// 如果其中一个数组还有剩余元素,复制剩下的部分到结果数组
while (i < n1) {
result[k++] = arr1[i++];
}
while (j < n2) {
result[k++] = arr2[j++];
}
}
int main() {
int arr1[5], arr2[5];
printf("请输入第一个有序数组的元素(以空格分隔): ");
scanf("%d %d %d %d %d", arr1);
printf("请输入第二个有序数组的元素(同样以空格分隔): ");
scanf("%d %d %d %d %d", arr2);
int size1 = sizeof(arr1) / sizeof(arr1[0]);
int size2 = sizeof(arr2) / sizeof(arr2[0]);
// 检查输入的数组是否真的已经排序,这里简化处理,实际应用需要验证
for (int i = 1; i < size1; i++) {
if (arr1[i] < arr1[i - 1]) {
printf("输入的第一个数组不是递增排列,结果可能不准确。\n");
break;
}
}
for (int i = 1; i < size2; i++) {
if (arr2[i] < arr2[i - 1]) {
printf("输入的第二个数组不是递增排列,结果可能不准确。\n");
break;
}
}
int merged_array[size1 + size2];
merge_sorted_arrays(arr1, arr2, size1, size2, merged_array);
printf("合并后的有序数组: ");
for (int i = 0; i < size1 + size2; i++) {
printf("%d ", merged_array[i]);
}
printf("\n");
return 0;
}
```
在这个示例中,`merge_sorted_arrays`函数接收两个指针、它们的长度以及结果数组的指针。它遍历两个数组,根据元素大小依次添加到结果数组中。注意,输入数组需要是预先排好序的,并且在主函数中做了简单检查。
阅读全文