47. 归并排序
题目链接
题目描述
给定一个整数数组 nums,将其升序排列。
题目示例

解法:归并排序
算法思路
归并排序是「分而治之」思想的典型应用。整个过程可以拆解为两个核心步骤:
- 分(Divide):将数组不断二分,直到子数组长度为 1。此时每个元素自身有序,问题转化为「左半部分排序」+「右半部分排序」。
- 治(Conquer):合并两个已排序的子数组,生成一个更长的有序数组。重复此过程直至整个数组有序。
C++ 代码实现
class Solution {
public:
vector<int> tmp; // 辅助数组,用于存放合并后的结果
void mergesort(vector<int>& nums, int left, int right) {
if (left == right) return;
// 1. 选择中间点划分区间
int mid = (right - left) / 2 + left;
// 2. 递归排序左右区间
mergesort(nums, left, mid);
mergesort(nums, mid + 1, 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++];
( i = left; i <= right; i++) {
nums[i] = tmp[i - left];
}
}
{
tmp.(nums.());
(nums, , nums.() - );
nums;
}
};





