c 将两个升序序列合并成一个升序序列
时间: 2024-09-13 08:05:14 浏览: 80
在C语言中,合并两个升序序列可以使用循环或者递归的方式实现。这里简单地给出一种基本的迭代方法:
```c
#include <stdio.h>
// 函数声明
void merge_sorted(int arr1[], int n1, int arr2[], int n2, int sorted[]) {
int i = 0, j = 0, k = 0;
// 当两个数组还有元素未处理时
while (i < n1 && j < n2) {
// 如果第一个数组的元素较小,则添加到结果数组并移动指针
if (arr1[i] <= arr2[j]) {
sorted[k++] = arr1[i++];
} else { // 否则从第二个数组添加,并移动指针
sorted[k++] = arr2[j++];
}
}
// 如果第一个数组还有剩余元素,直接复制过去
while (i < n1) {
sorted[k++] = arr1[i++];
}
// 对于第二个数组的剩余部分也做同样的操作
while (j < n2) {
sorted[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 merged[n1 + n2]; // 结果数组大小为两数组之和
merge_sorted(arr1, n1, arr2, n2, merged);
printf("合并后的升序数组: ");
for (int i = 0; i < n1 + n2; i++) {
printf("%d ", merged[i]);
}
return 0;
}
```
上述代码首先比较两个数组的第一个元素,将较小的放入结果数组,然后依次类推直到其中一个数组遍历完。最后,如果其中一个数组还有剩余元素,将其全部添加到结果数组。
阅读全文