算法思想
归并排序的核心思想是 分治,具体流程如下。
- 确定分界点 mid:中间位置;
- 递归排序左右区间;
- 归并两个有序数组(重点) :合二为一。
算法模板
void mergeSort(vector<int>& nums,int l, int r){
if(l >= r) return ;
int mid = l + (r - l) / 2;
mergeSort(nums,l,mid);
mergeSort(nums,mid + 1,r);
// merge
int tmp[r - l + 1];
int k = 0,i = l,j = mid + 1;
while(i <= mid and j <= r){
tmp[k++] = nums[i] <= nums[j] ? nums[i++] : nums[j++];
}
while(i <= mid) tmp[k++] = nums[i++];
while(j <= r) tmp[k++] = nums[j++];
for(int i = l,j = 0;i <= r;++i,++j) nums[i] = tmp[j];
}