二路归并代码
class Solution{
public:
void mergeSort(vector<int> nums, int left, int right){
if(left>=right){
return;
}
int mid = left + ((right-left)>>1);
mergeSort(nums,left,mid);
mergeSort(nums,mid+1,right);
merge(nums,left,mid,right);
}
void merge(vector<int> nums, int left, int mid, int right){
vector<int> tmp(right-left+1,0);
int i = left;
int j = mid + 1;
int k = 0;
while(i<=mid && j<=right){
if(nums[i]<nums[j]){
tmp[k++] = nums[i++];
}
else {
tmp[k++] = nums[j++];
}
}
if(i<=mid){
while(i<=mid)
tmp[k++] = nums[i++];
}
else {
while(j<=right)
tmp[k++] = nums[j++];
}
while(k>=0){
nums[right--] = nums[--k];
}
}
};