C++分治法合并排序数组由用户输入
时间: 2024-12-25 11:32:08 浏览: 4
在C++中,分治法合并排序数组通常用于解决排序问题,如将两个已排序的数组合并成一个新的有序数组。合并排序算法利用了分治策略,它将大问题分解为小问题,然后递归地解决它们,最后再合并结果。
首先,用户会被提示输入两个整数数组,每个数组都是用户自己提供的,并假设已经排好序。接下来,你需要编写一个`merge`函数,该函数接收两个指针分别指向两个已排序数组的起始位置,然后逐个比较元素,将较小的放入新数组,直到其中一个数组遍历完。然后,将另一个数组剩余的部分复制到新数组中。
以下是一个简单的示例代码:
```cpp
#include <iostream>
using namespace std;
// 合并两个已排序的数组
void merge(int arr1[], int m, int arr2[], int n, int& result[]) {
int i = 0, j = 0, k = 0;
while (i < m && j < n) {
if (arr1[i] <= arr2[j]) {
result[k++] = arr1[i++];
} else {
result[k++] = arr2[j++];
}
}
// 如果arr1还有剩余元素,直接复制过去
while (i < m) {
result[k++] = arr1[i++];
}
// 如果arr2还有剩余元素,同样处理
while (j < n) {
result[k++] = arr2[j++];
}
}
int main() {
int size;
cout << "请输入第一个数组的大小: ";
cin >> size;
int arr1[size], arr2[size];
cout << "请输入第一个数组的元素: ";
for (int i = 0; i < size; ++i) {
cin >> arr1[i];
}
cout << "请输入第二个数组的大小: ";
cin >> size;
for (int i = 0; i < size; ++i) {
cin >> arr2[i];
}
int combined[size * 2]; // 新数组,足够存储两个数组的所有元素
merge(arr1, size, arr2, size, combined);
cout << "合并后的有序数组: ";
for (int i : combined) {
cout << i << " ";
}
cout << endl;
return 0;
}
```
阅读全文