该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
public static void quickSort(int[] arr,int p,int r){
if(p<r){int q = partition(arr,p,r);
quickSort(arr,p,q-1);
quickSort(arr,q+1,r);
}
}
private static int partition(int[] arr, int p, int r) {
int x = arr[r];
int i = p-1;
for(int j=p;j<r;j++){
if(arr[j]<x){
i++;
swap(arr,i,j);
}
}
i++;
swap(arr,i,r);
return i;
}
private static void swap(int[] arr, int i, int largestIndex) {
int temp = arr[i];
arr[i] = arr[largestIndex];
arr[largestIndex] = temp;
}
public static int randomPartition(int[] arr,int p,int r){
int i = new Random().nextInt(arr.length);
swap(arr,i,r);
return partition(arr,p,r);
}
public static void randomQuickSort(int[] arr,int p,int r){
if(p<r){
int q = randomPartition(arr,p,r);
quickSort(arr,p,q-1);
quickSort(arr,q+1,r);
}
}