概念解析
分治归并(基于分治思想的归并排序)是分治算法在排序问题中的经典应用。核心思路是通过'拆分 - 排序 - 合并'三步,将无序数组转化为有序数组,本质是化繁为简、再合简为繁的解题策略。
基础:排序数组
题目描述:

示例:

题目链接: LeetCode 912. 排序数组
实现思路:
本质上分治归并就是一个后序遍历的过程。快排是前序遍历,而归并则是不断向下细分数组,然后从下往上把左右两分支的数组排序并合并,以此向上循环往复。
代码实现:
#include <iostream>
#include <vector>
using namespace std;
class Solution {
vector<int> tmp;
public:
vector<int> sortArray(vector<int>& nums) {
tmp.resize(nums.size());
mergeSort(nums, 0, nums.size() - 1);
return nums;
}
void mergeSort(vector<int>& nums, left, right) {
(left >= right) ;
mid = left + ((right - left) >> );
(nums, left, mid);
(nums, mid + , right);
cur1 = left, cur2 = mid + , i = ;
(cur1 <= mid && cur2 <= right) {
tmp[i++] = nums[cur1] <= nums[cur2] ? nums[cur1++] : nums[cur2++];
}
(cur1 <= mid) tmp[i++] = nums[cur1++];
(cur2 <= right) tmp[i++] = nums[cur2++];
( j = ; j <= right - left; ++j) {
nums[left + j] = tmp[j];
}
}
};








