1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| class Solution { public int[] sortArray(int[] nums) { int left = 0, right = nums.length - 1; sortArray(nums, left, right); return nums; }
private void sortArray(int[] nums, int left, int right) { if (left >= right) { return; }
int pivotIndex = partition(nums, left, right); sortArray(nums, left, pivotIndex - 1); sortArray(nums, pivotIndex + 1, right); }
private int partition(int[] nums, int left, int right) { int randomIndex = left + ThreadLocalRandom.current().nextInt(right - left + 1); int pivotValue = nums[randomIndex]; swap(nums, left, randomIndex);
int i = left, j = right; while (i < j) { while (i < j && nums[j] >= pivotValue) { j--; } while (i < j && nums[i] <= pivotValue) { i++; } swap(nums, i, j); }
swap(nums, left, i); return i; }
private void swap(int[] nums, int i, int j) { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } }
|