用C++,写出对应代码:已有两个数组a1和a2, 其中数组a1长度为M+N, 前M个数值有效且有序;数组a2长度为N,有序。如何不开辟新的空间合并a1, a2成为一个有序数组
时间: 2024-09-29 13:15:14 浏览: 30
你可以使用双指针技巧来合并这两个有序数组,不需要开辟新空间。下面是C++代码的一个示例:
```cpp
#include <iostream>
void mergeArrays(int a1[], int a2[], int m, int n) {
// 初始化指针
int i = 0; // a1 的指针
int j = 0; // a2 的指针
int k = 0; // 结果数组的指针
while (i < m && j < n) { // 当两个数组还有剩余元素
if (a1[i] <= a2[j]) { // 如果a1当前元素较小
a1[k++] = a1[i++]; // 将a1的元素放入结果并移动指针
} else {
a1[k++] = a2[j++]; // 否则将a2的元素放入结果并移动指针
}
}
// 把剩下的元素(如果有的话)添加到结果数组
while (i < m) {
a1[k++] = a1[i++];
}
while (j < n) {
a1[k++] = a2[j++];
}
}
int main() {
int M = 5;
int N = 4;
int a1[M + N] = {1, 3, 5, 7, 9, 0, 0, 0, 0, 0}; // 假设前M个值已排序
int a2[N] = {2, 4, 6, 8};
mergeArrays(a1, a2, M, N);
for (int i = 0; i < M + N; ++i) {
std::cout << a1[i] << " ";
}
return 0;
}
```
当你运行这个程序,你会看到合并后的有序数组 `1 2 3 4 5 6 7 8 9`。
阅读全文