快速排序
class Solution {
public int[] sortArray(int[] nums) {
quickSort(nums, 0, nums.length - 1);
return nums;
}
public void quickSort(int[] nums, int left, int right) {
if (left >= right) {
return;
}
int randomIndex = new Random().nextInt(right - left + 1) + left;
swap(nums, randomIndex, left);
int pivot = nums[left];
// 小于 pivot:[left, less]
// 等于 pivot:[less + 1, index]
// 大于 pivot:[more, right]
int less = left - 1;
int more = right + 1;
int index = left + 1;
while (index < more) {
if (nums[index] < pivot) {
less++;
swap(nums, index, less);
index++;
} else if (nums[index] == pivot) {
index++;
} else {
more--;
swap(nums, index, more);
}
}
quickSort(nums, left, less);
quickSort(nums, more, right);
}
// 交换
public void swap(int[] nums, int a, int b) {
int temp = nums[a];
nums[a] = nums[b];
nums[b] = temp;
}
}
注:区分为三个区间是防止数组中出现大量重复元素导致超时