用visual C++写出将两个顺序存储的有序表A和B合成一个有序表C的算法。 A 1 4 6 7 9 B 2 3 8 11 C 1 2 3 4 6 7 8 9 11
时间: 2023-12-10 10:41:32 浏览: 135
下面是一种基于归并排序思想的算法:
```cpp
void merge(int A[], int m, int B[], int n, int C[]) {
int i = 0, j = 0, k = 0;
while (i < m && j < n) {
if (A[i] <= B[j]) {
C[k++] = A[i++];
} else {
C[k++] = B[j++];
}
}
while (i < m) {
C[k++] = A[i++];
}
while (j < n) {
C[k++] = B[j++];
}
}
void mergeSort(int A[], int n) {
if (n <= 1) {
return;
}
int mid = n / 2;
mergeSort(A, mid);
mergeSort(A + mid, n - mid);
int* tmp = new int[n];
merge(A, mid, A + mid, n - mid, tmp);
memcpy(A, tmp, n * sizeof(int));
delete[] tmp;
}
void mergeLists(int A[], int m, int B[], int n, int C[]) {
mergeSort(A, m);
mergeSort(B, n);
merge(A, m, B, n, C);
}
```
其中,`merge` 函数实现了两个有序数组的归并操作,`mergeSort` 函数实现了归并排序,`mergeLists` 函数则是将两个有序数组合并成一个有序数组的入口函数。在 `mergeLists` 中,我们先对数组 A 和 B 分别进行归并排序,然后再将它们合并成一个有序数组 C。
阅读全文