c语言已知顺序表L1和L2中数据均由小到大排序,请用尽可能快的方法将L1与L2中的数据合并到L3中,使数据在L3中按升序排列的代码
时间: 2024-09-24 16:02:14 浏览: 87
为了快速合并两个有序列表 L1 和 L2 到一个新的有序列表 L3,你可以使用双指针法。这是一种简单而高效的方法,它利用了两个指针分别遍历 L1 和 L2,每次比较当前指针所指向的元素,选择较小的一个放入 L3,并移动对应的指针。当其中一个列表遍历完之后,只需将另一个列表剩余的部分复制到 L3 尾部即可。
以下是一个简单的 C 语言实现:
```c
#include <stdio.h>
void merge_sorted_lists(int *list1, int *list2, int *list3, int n1, int n2) {
int i = 0, j = 0, k = 0;
while (i < n1 && j < n2) {
if (list1[i] <= list2[j]) {
list3[k++] = list1[i++];
} else {
list3[k++] = list2[j++];
}
}
// 将剩余部分复制到 list3
while (i < n1) {
list3[k++] = list1[i++];
}
while (j < n2) {
list3[k++] = list2[j++];
}
}
int main() {
int L1[] = {1, 3, 5, 7};
int L2[] = {2, 4, 6, 8};
int L3[8]; // 假设L3足够大,存储n1+n2的元素
int n1 = sizeof(L1) / sizeof(L1[0]);
int n2 = sizeof(L2) / sizeof(L2[0]);
merge_sorted_lists(L1, L2, L3, n1, n2);
for (int i = 0; i < n1 + n2; i++) {
printf("%d ", L3[i]); // 打印结果
}
return 0;
}
```
阅读全文