class Solution {
Random random = new Random();
public int[] sortArray(int[] nums) {
quicksort(nums,0,nums.length - 1);
return nums;
}
private void quicksort(int[] nums,int left, int right) {
if(left >= right){
return;
}
int randomIndex = left + random.nextInt(right - left + 1);
swap(nums,left,randomIndex);
int lt = left + 1;
int gt = right;
int i = left + 1;
while (i <= gt){
if(nums[i] < nums[left]){
swap(nums,lt,i);
lt++;
i++;
}else if(nums[i] == nums[left]){
i++;
}else {
swap(nums,i,gt);
gt--;
}
}
swap(nums,left,lt - 1);
quicksort(nums,left,lt - 2);
quicksort(nums,gt + 1,right);
}
private void swap(int[] nums,int index1, int index2){
int temp = nums[index1];
nums[index1] = nums[index2];
nums[index2] = temp;
}
}