static void quick(int [] arr , int start , int end){
if(start >= end){
return;
}
int mid = pr(arr , start , end);
quick(arr , start , mid - 1);
quick(arr , mid + 1 , end);
}
private static int pr(int[] arr, int start, int end) {
int rn = arr[end];
int ln = start - 1;
for(int i = start ; i < end ; ++i){
if(arr[i] < rn){
++ln;
int temp = arr[i];
arr[i] = arr[ln];
arr[ln] = temp;
}
}
++ln;
int temp = arr[end];
arr[end] = arr[ln];
arr[ln] = temp;
return ln;
}
随机快速排序
static void quick(int [] num , int start , int end ){
if(start >= end){
return;
}
int mid = ranpri(num , start , end);
quick(num , start , mid - 1);
quick(num , mid + 1 , end);
}
private static Random random = new Random();
static int ranpri(int [] num , int start , int end){
int ran = random.nextInt(end - start) + start;
we(num , ran , end);
return pri(num , start , end);
}
static int pri(int [] num , int start , int end){
int rn = num[end];
int ln = start - 1;
for(int i = start ; i < end ; ++i){
if(num[i]< rn){
++ln ;
we(num , i , ln);
}
}
++ln;
we(num , end , ln);
return ln;
}
static void we(int [] num , int start , int end){
int temp = num[start];
num[start] = num[end];
num[end] = temp;
}