c++用分治法实现归并排序
时间: 2024-05-25 21:07:14 浏览: 120
C语言用分治法实现数组归并排序算法实现
C++中使用分治法实现归并排序是一种常见的排序算法。归并排序的基本思想是将待排序的序列不断地划分成更小的子序列,直到每个子序列只有一个元素,然后再将这些子序列两两合并,直到最终得到一个有序的序列。
以下是使用分治法实现归并排序的步骤:
1. 将待排序的序列划分成两个子序列,分别对这两个子序列进行递归调用归并排序。
2. 当子序列只有一个元素时,返回该子序列。
3. 将两个有序的子序列合并成一个有序的序列。
下面是C++代码示例:
```cpp
#include <iostream>
#include <vector>
// 合并两个有序子序列
void merge(std::vector<int>& nums, int left, int mid, int right) {
std::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 mergeSort(std::vector<int>& nums, int left, int right) {
if (left >= right) {
return;
}
int mid = left + (right - left) / 2;
mergeSort(nums, left, mid);
mergeSort(nums, mid + 1, right);
merge(nums, left, mid, right);
}
int main() {
std::vector<int> nums = {5, 2, 9, 1, 3, 6};
mergeSort(nums, 0, nums.size() - 1);
for (int num : nums) {
std::cout << num << " ";
}
return 0;
}
```
阅读全文