class Solution {
//创建随机对象,便于后于选基准值
static Random random = new Random();
public int[] sortArray(int[] nums) {
int n = nums.length;
int left = 0;
int right = n-1;
quicksort(nums,left,right);
return nums;
}
void quicksort(int[] nums, int left , int right){
if(right<left){
return ;
}
int i = left;
int j = right;
//基准值选取
int pirot = random.nextInt(right-left+1)+left;
int base = nums[pirot];
//选定基准值后,将基准值的位置和最开头的位置交换,这样在右边留出连续空间,便于交换
swap(nums,pirot,left);
while(i!=j){
while(nums[j]>=base && i<j){
--j;
}
while(nums[i]<=base && i<j){
++i;
}
swap(nums,i,j);
}
//将右边连续空间的数组排好后,此时i=j会指向一个小于base的数,将这个数和最左边的基准值位置交换,得到排序后,基准值左边的数小于基准值,右边的数大于基准值
swap(nums,left,i);
quicksort(nums,left,i-1);
quicksort(nums,i+1,right);
}
void swap(int[] nums,int left,int right){
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}
}