C语言如何将两个顺序有序表合并
时间: 2024-09-25 13:02:14 浏览: 34
在C语言中,合并两个已经排序的顺序表(通常是指数组形式的列表)可以采用归并排序的思想,创建一个新的有序列表。以下是基本步骤:
1. **初始化临时数组**:创建一个足够大的临时数组用于存放合并后的结果。
2. **指针初始化**:定义两个指向原数组的指针,一个指向第一个数组的开始,另一个指向第二个数组的开始。同时,定义一个指向临时数组的指针,初始位置设为0。
3. **比较和交换**:对比两个指针所指向的元素,选择较小的一个放入临时数组,并将其对应的数组指针向前移动一位。重复此过程直到其中一个数组遍历完。
4. **剩余元素复制**:如果还有剩余的元素未添加到临时数组,将另一个数组剩余部分直接复制到临时数组。
5. **返回新数组**:将临时数组的内容复制回目标有序表,即合并完成。
下面是简单的伪代码示例:
```c
void merge_sorted_arrays(int* arr1, int size1, int* arr2, int size2, int* merged_arr)
{
int i = 0, j = 0, k = 0;
while (i < size1 && j < size2)
{
if (arr1[i] <= arr2[j])
merged_arr[k++] = arr1[i++];
else
merged_arr[k++] = arr2[j++];
}
// 如果还有剩余元素,直接复制
while (i < size1)
merged_arr[k++] = arr1[i++];
while (j < size2)
merged_arr[k++] = arr2[j++];
// 将临时数组内容复制回目标数组
for (i = 0; i < k; i++)
arr1[i] = merged_arr[i];
}
```
阅读全文