快排
1.颜色分类
class Solution {
public void swap(int[] nums, int i, int j){
int t = nums[i];
nums[i] = nums[j];
nums[j] = t;
}
public void sortColors(int[] nums) {
int left=-1 ,i=0 ,right=nums.length;
while(i<right){
if(nums[i] == 0) swap(nums, ++left, i++);
else if(nums[i] == 1) i++;
else swap(nums, --right, i);
}
}
}
2.排序数组
排序的规则和颜色分类的思想基本一致
那么key的值如何选择
class Solution {
public int[] sortArray(int[] nums) {
int left=0;
int right=nums.length-1;
qsort(nums,left,right);
return nums;
}
public void qsort(int[] nums,int l,int r){
if(l>=r){
return;
}
int key=nums[new Random().nextInt(r-l+1)+l];
int left=l-1;
int right=r+1;
int i=l;
while(i<right){
if(nums[i]<key){
swap(nums,++left,i++);
}else if(nums[i]==key){
i++;
}else{
swap(nums,--right,i);
}
}
qsort(nums,l,left);
qsort(nums,right,r);
}
public void swap(int[] nums,int m,int n){
int t=nums[m];
nums[m]=nums[n];
nums[n]=t;
}
}