private void mergeSort(int[] nums, int left, int right, int[] temp){
if(left < right){
int mid = (left + right)>>>1;
mergeSort(nums, left, mid, temp);
mergeSort(nums, mid + 1, right, temp);
merge(nums, left, mid, right, temp);
}
}
private void merge(int[] nums, int left, int mid, int right, int[] temp){
int i = left;//左序列指针
int j = mid + 1;//右序列指针
int t = 0;//临时数组指针
while(i <= mid && j <= right){
if(nums[i] <= nums[j]){
temp[t++] = nums[i++];
}else{
temp[t++] = nums[j++];
}
}
while(i <= mid){
temp[t++] = nums[i++];
}
while(j <= right){
temp[t++] = nums[j++];
}
t = 0;
while(left <= right){
nums[left++] = temp[t++];
}
}