在C语言中,合并两个有序数组通常使用双指针方法。这种方法涉及创建一个新的数组,并使用两个指针分别遍历两个输入数组,将较小的元素按顺序添加到新数组中,直到一个数组的所有元素都被添加完毕。然后,将另一个数组中剩余的元素复制到新数组中。这种方法的时间复杂度为O(n),其中n是两个数组的总长度,空间复杂度也为O(n),因为需要额外的空间来存储合并后的数组。
```c
include
// 合并两个有序数组的函数
void merge(int arr1[], int size1, int arr2[], int size2, int merged[]) {
int i = 0, j = 0, k = 0;
// 遍历两个数组,直到一个数组结束
while (i < size1 && j < size2) {
if (arr1[i] <= arr2[j]) {
merged[k++] = arr1[i++];
} else {
merged[k++] = arr2[j++];
}
}
// 如果arr1中还有剩余元素,将它们复制到merged数组中
while (i < size1) {
merged[k++] = arr1[i++];
}
// 如果arr2中还有剩余元素,将它们复制到merged数组中
while (j < size2) {
merged[k++] = arr2[j++];
}
}
int main() {
int arr1[] = {1, 3, 5, 6, 9};
int arr2[] = {2, 4, 7, 8, 10};
int size1 = sizeof(arr1) / sizeof(arr1);
int size2 = sizeof(arr2) / sizeof(arr2);
int merged[size1 + size2]; // 创建一个新数组,大小为两个输入数组大小之和
// 调用merge函数合并数组
merge(arr1, size1, arr2, size2, merged);
// 打印合并后的数组
for (int i = 0; i < size1 + size2; i++) {
printf("%d ", merged[i]);
}
printf("\n");
return 0;
}
```
在这个示例中,`merge`函数接受两个有序数组`arr1`和`arr2`以及它们的大小`size1`和`size2`,以及一个用于存储合并结果的数组`merged`。函数通过比较两个数组的元素并将较小的元素添加到`merged`数组中来合并它们。在`main`函数中,我们定义了两个有序数组`arr1`和`arr2`,并调用`merge`函数来合并它们。最后,我们打印出合并后的数组。