快速排序1.0
public static void quickSort1(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
process1(arr,0,arr.length-1);
}
public static void process1(int[] arr, int L, int R) {
if (L >= R) {
return;
}
int M=partition1(arr,L,R);
process1(arr,L,M-1);
process1(arr,M+1,R);
}
快速排序2.0
//快速排序2.0
public static void quickSort2(int[] arr) {
if(arr==null||arr.length<2) {
return;
}
process2(arr,0,arr.length-1);
}
//arr[L..R]位置排序
public static void process2(int[] arr,int L,int R) {
if(L>R) {
return;
}
if(L==R) {
return;
}
//L<R
int[] equalE=partition(arr,L,R);
//equalE[0]等于区域的第一个数
//equalE[0]等于区域的最后一个数
process2(arr,L,equalE[0]-1);
process2(arr,equalE[1]+1,R);
}
快速排序3.0(随机快排)最经典
时间复杂度O(N*logN)
//快速排序3.0即随机快排(任意选取一个数做划分)