class Solution {
public int[] sortArray(int[] nums) {
// 区间 [0, nums.length - 1]
quicksort(nums, 0, nums.length - 1);
return nums;
}
// 区间 [left, right]
private void quicksort(int[] nums, int left, int right) {
if (left >= right) return;
int num = partition(nums, left, right);
quicksort(nums, left, num - 1);
quicksort(nums, num + 1, right);
}
private int partition(int[] nums, int left, int right) {
int base = nums[left];
while (left < right) {
while (left < right && nums[right] >= base) { right--; } // 右边找到第一个小于 base 的数, 所以循环条件是 >=
swap(nums, left, right);
while (left < right && nums[left] <= base) { left++; } // 左边找到第一个大于 base 的数, 所以循环条件是 <=
swap(nums, left, right);
}
return left;
}
private void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}