c语言编程两个有序数组怎么用

时间:2025-03-05 14:12:16 明星趣事

在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`函数来合并它们。最后,我们打印出合并后的数组。