

vector<int> tmp;
vector<int> sortArray(vector<int>& nums)
{
tmp.resize(nums.size());
mergeSort(nums,0,nums.size()-1);
return nums;
}
void mergeSort(vector<int>& nums,int left,int right)
{
//只有一个元素或者区间不存在直接返回
if(left>=right) return;
//1、选择中间点划分区间
int mid = (left+right)>>1;
//2、左右区间排序
mergeSort(nums,left,mid);
mergeSort(nums,mid+1,right);
//3、合并两个有序数组
int cur1 = left,cur2 = mid+1,i = 0;
while(cur1<=mid && cur2<=right)
tmp[i++] = nums[cur1]<=nums[cur2] ? nums[cur1++] : nums[cur2++];
//处理没有遍历完的数组
while(cur1<=mid) tmp[i++] = nums[cur1++];
while(cur2<=right) tmp[i++] = nums[cur2++];
//4、还原
for(int i = left;i<=right;i++)
nums[i] = tmp[i-left];
}