归并排序精简版
class Solution {
int[] tmp; //临时数组复制使用
public int[] sortArray(int[] nums) {
tmp = new int[nums.length];
mergeSort(nums, 0, nums.length - 1);
return nums;
}
public void mergeSort(int[] nums, int l, int r) {
if (l >= r) return;
int mid = (l + r) >> 1;
mergeSort(nums, l, mid);
mergeSort(nums, mid + 1, r);
int i = l, j = mid + 1; //两个数组的起始坐标
int cnt = 0; //合并数组的下标
while (i <= mid && j <= r) { //合并两个有序数组
if (nums[i] <= nums[j]) {
tmp[cnt++] = nums[i++];
} else {
tmp[cnt++] = nums[j++];
}
}
while (i <= mid) { //处理没复制完的
tmp[cnt++] = nums[i++];
}
while (j <= r) {
tmp[cnt++] = nums[j++];
}
for (int k = 0; k < r - l + 1; ++k) { //转回原数组
nums[k + l] = tmp[k];
}
}
}
{
一点尘尘
}
浙公网安备 33010602011771号