c语言将两个有序数列合并为一个有序数列
时间: 2023-06-14 12:06:07 浏览: 103
C++实现两个有序数组的合并
可以使用归并排序的思想来将两个有序数列合并为一个有序数列。
具体实现步骤如下:
1. 定义两个有序数列,以及合并后的有序数列;
2. 初始化三个指针:p1指向第一个有序数列的起始位置,p2指向第二个有序数列的起始位置,p3指向合并后的有序数列的起始位置;
3. 比较p1和p2指向的元素,将较小的元素插入合并后的有序数列中,并将对应指针向后移动一位;
4. 重复第三步,直到其中一个有序数列中的所有元素都被插入到合并后的有序数列中;
5. 将另一个有序数列中剩余的元素插入到合并后的有序数列中;
6. 返回合并后的有序数列。
代码实现如下:
```
#include <stdio.h>
void merge(int arr1[], int len1, int arr2[], int len2, int res[]) {
int p1 = 0, p2 = 0, p3 = 0;
while (p1 < len1 && p2 < len2) {
if (arr1[p1] < arr2[p2]) {
res[p3++] = arr1[p1++];
} else {
res[p3++] = arr2[p2++];
}
}
while (p1 < len1) {
res[p3++] = arr1[p1++];
}
while (p2 < len2) {
res[p3++] = arr2[p2++];
}
}
int main() {
int arr1[] = {1, 3, 5, 7, 9};
int len1 = sizeof(arr1) / sizeof(int);
int arr2[] = {2, 4, 6, 8, 10};
int len2 = sizeof(arr2) / sizeof(int);
int res[10];
merge(arr1, len1, arr2, len2, res);
for (int i = 0; i < len1 + len2; i++) {
printf("%d ", res[i]);
}
printf("\n");
return 0;
}
```
输出结果为:1 2 3 4 5 6 7 8 9 10。
阅读全文