时间复杂度:O(nlogn)
class Solution {
private final static Random random = new Random(System.currentTimeMillis());
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){
int pos = partition(nums, left, right);
quickSort(nums, left, pos-1);
quickSort(nums, pos+1, right);
}
}
public int partition(int[] nums, int left, int right){
int randomIndex = left + random.nextInt(right - left + 1);
swap(nums, left, randomIndex);
int pivot = nums[left];
int le = left + 1;
int ge = right;
while(true){
while(le <= ge && nums[le] < pivot){
le++;
}
while(le <= ge && nums[ge] > pivot){
ge--;
}
if(le >= ge){
break;
}
swap(nums, le, ge);
le++;
ge--;
}
swap(nums, ge, left);
return ge;
}
public void swap(int[] nums, int i, int j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}