两路合并排序算法c++
时间: 2023-08-04 16:10:30 浏览: 92
下面是一个简单的C++代码实现,用于合并排序两个已排序的数组。这是一个递归算法,将数组分成两部分,对每个部分进行排序,之后将它们合并在一起:
```c++
#include <iostream>
#include <vector>
using namespace std;
// 合并两个已排序的子数组
void merge(vector<int>& nums, 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 (nums[i] <= nums[j]) {
temp[k++] = nums[i++];
} else {
temp[k++] = nums[j++];
}
}
while (i <= mid) {
temp[k++] = nums[i++];
}
while (j <= right) {
temp[k++] = nums[j++];
}
for (int p = 0; p < k; ++p) {
nums[left + p] = temp[p];
}
}
// 合并排序函数
void merge_sort(vector<int>& nums, int left, int right) {
if (left >= right) return;
int mid = (left + right) / 2;
merge_sort(nums, left, mid);
merge_sort(nums, mid + 1, right);
merge(nums, left, mid, right);
}
int main() {
vector<int> nums = {3, 5, 1, 7, 2, 9, 4, 6};
merge_sort(nums, 0, nums.size() - 1);
for (int num : nums) {
cout << num << " ";
}
return 0;
}
```
这里使用了一个辅助函数 `merge()`,它用于合并两个已排序的子数组。主要思路是创建一个临时数组,将两个子数组中的元素按顺序插入到这个数组中,然后将临时数组中的元素复制回原数组中。
合并排序函数 `merge_sort()` 是递归的,它将数组分成两个部分,对每个部分分别进行排序,然后将它们合并在一起。当数组的大小为1时,排序完成。
阅读全文