题目:
链接: link
解析:
代码:
//归并:
int[] tmp;
public int[] sortArray(int[] nums) {
tmp = new int[nums.length];
sortArray(nums,0,nums.length-1);
return nums;
}
public void sortArray(int[] nums, int left, int right){
if(left >= right) return;
int mid = (left+right)/2;
// 1. 根据中间点划分区间:[left,mid][mid+1,right]
sortArray(nums, left,mid);
sortArray(nums,mid+1,right);
//合并两个有序数组:
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++];
//把排序好的数组放到原数组里
for(int j = left; j <= right; j++){
nums[j] = tmp[j-left];
}
}