用C++实现一个无序数组的两路合并排序
时间: 2023-11-27 22:50:16 浏览: 112
好的,以下是一个使用C++实现的无序数组的两路合并排序的代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
void merge(vector<int>& arr, int left, int mid, int right) {
vector<int> temp(right - left + 1);
int i = left, j = mid + 1, k = 0;
while (i <= mid && j <= right) {
if (arr[i] <= arr[j]) {
temp[k++] = arr[i++];
} else {
temp[k++] = arr[j++];
}
}
while (i <= mid) {
temp[k++] = arr[i++];
}
while (j <= right) {
temp[k++] = arr[j++];
}
for (int p = 0; p < k; ++p) {
arr[left + p] = temp[p];
}
}
void mergeSort(vector<int>& arr, int left, int right) {
if (left >= right) {
return;
}
int mid = left + ((right - left) >> 1);
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
int main() {
vector<int> arr = {3, 9, 2, 4, 8, 5, 1};
mergeSort(arr, 0, arr.size() - 1);
for (auto num : arr) {
cout << num << " ";
}
return 0;
}
```
在上述代码中,`merge`函数用于合并两个有序数组,`mergeSort`函数用于将无序数组不断划分为更小的子问题,直到只剩下一个元素为止,然后利用`merge`函数将子问题合并成更大的有序数组。最后在`main`函数中调用`mergeSort`函数对无序数组进行排序,输出有序数组。
运行结果:
```
1 2 3 4 5 8 9
```
阅读全文