将2个升序数组合并为一个升序数组,用C语言归并排序写
时间: 2024-12-14 12:27:24 浏览: 12
cpp代码-(数组)将两个升序数组合并为一个升序数组
在C语言中,可以使用归并排序的思想来合并两个已经升序排列的数组。归并排序是一种分治算法,它将大问题分解成小问题解决,然后合并结果。以下是合并两个升序数组的一个基本步骤:
```c
#include <stdio.h>
void merge(int arr1[], int n1, int arr2[], int n2, int result[]) {
int i = 0, j = 0, k = 0;
// 比较两个数组的元素,较小的放入result数组
while (i < n1 && j < n2) {
if (arr1[i] <= arr2[j]) {
result[k++] = arr1[i++];
} else {
result[k++] = arr2[j++];
}
}
// 如果其中一个数组还有剩余元素,将剩下的全部添加到result数组
while (i < n1) {
result[k++] = arr1[i++];
}
while (j < n2) {
result[k++] = arr2[j++];
}
}
// 主函数示例
int main() {
int arr1[] = {1, 3, 5};
int n1 = sizeof(arr1) / sizeof(arr1[0]);
int arr2[] = {2, 4, 6};
int n2 = sizeof(arr2) / sizeof(arr2[0]);
int combined_arr[n1 + n2]; // 结果数组
merge(arr1, n1, arr2, n2, combined_arr);
printf("合并后的升序数组: ");
for (int i = 0; i < n1 + n2; i++) {
printf("%d ", combined_arr[i]);
}
return 0;
}
```
这个`merge()`函数首先比较两个数组的第一个元素,选择较小的那个放入结果数组,并移动对应指针。当一个数组遍历完,就将另一个数组剩余的部分直接添加到结果数组。
阅读全文