用c++编写一个程序,将两个有序数组合并成一个更大的有序数组,要求时间复杂度为O(n)。
时间: 2023-12-01 08:57:05 浏览: 116
下面是一个示例程序,它将两个有序数组合并成一个更大的有序数组,并且时间复杂度为O(n)。
```c
#include <stdio.h>
void merge(int arr1[], int n1, int arr2[], int n2, int merged[]) {
int i = 0, j = 0, k = 0;
while (i < n1 && j < n2) {
if (arr1[i] < arr2[j]) {
merged[k] = arr1[i];
i++;
} else {
merged[k] = arr2[j];
j++;
}
k++;
}
while (i < n1) {
merged[k] = arr1[i];
i++;
k++;
}
while (j < n2) {
merged[k] = arr2[j];
j++;
k++;
}
}
int main() {
int arr1[] = {1, 3, 5};
int n1 = sizeof(arr1) / sizeof(arr1[0]);
int arr2[] = {2, 4, 6};
int n2 = sizeof(arr2) / sizeof(arr2[0]);
int merged[n1 + n2];
merge(arr1, n1, arr2, n2, merged);
printf("Merged array: ");
for (int i = 0; i < n1 + n2; i++) {
printf("%d ", merged[i]);
}
printf("\n");
return 0;
}
```
在这个程序中,我们使用了三个指针 i、j、k 来遍历两个数组和合并后的数组。我们首先比较 arr1[i] 和 arr2[j] 的值,将较小的值存入 merged[k] 中,并将指向该值的指针向前移动一位。这个过程一直持续到至少一个数组遍历完为止。然后我们将剩余的元素存入 merged[k] 中,最后输出合并后的数组。
这个程序的时间复杂度为 O(n),其中 n 是两个数组的总长度。
阅读全文