#l 逻辑
首先随机找一个数p(0<p<array.length-1),把array[p]做为pivot。把小于array[p]的数都放在array[p]之前,大于array[p]的数都放在其后,最后返回array[p]新坐标的((方法partition)。接着,递归地对pivot左边的数和右边的数采取quicksort。
伪代码
代码
public static void quickSort(int[]array,int l,int r){
if (l<r){
int p=partition(array,l,r);
quickSort(array,l,p-1);
quickSort(array,p+1,r);}
}
public static int partition(int[] array,int le,int ri){
Random random=new Random();
int l=le,r=ri;
int p=random.nextInt(r-l)+l;
int []A=new int[array.length];
int pivot=array[p];
for (int i = le; i <ri+1; i++) {
if (i!=p){
if (array[i]<pivot){
A[l]=array[i];
l++;
}else {
A[r]=array[i];
r--;
}
}
}
A[l]=pivot;
// l++;
for (int i = le; i <ri+1; i++) {
array[i]=A[i];
}
return l;
}