//快速排序,选取右边界元素为切分元素
public class QuickSort {
/*
public static void main(String[] args) {
int a[] = {99,32,5,4,101,265,322,45,1,3};
a=Quick_Sort(a);
for(int i:a) {
System.out.print(i+" ");
}
}
*/
//快速排序主方法
public static int[] Quick_Sort(int[] A) {
A=Quick_Sort(A,0,A.length-1);
return A;
}
private static int[] Quick_Sort(int[] A,int p,int r) {
int q=0;
if(p<r) {
q=Partition(A, p, r);
A=Quick_Sort(A, p, q-1);
A=Quick_Sort(A, q+1, r);
}
return A;
}
//快速排序的主元划分方法(右边界选取A[r])
private static int Partition(int[] A,int p,int r) {
int temp=0;
//选取A[r]即high坐标为切分元素,把数组划分成左边都小于x,右边都大于x,x位于中间的形式
int x=A[r];
//i从p开始
int i=p;
//j从数组左边界p开始,到右边界的前一个r-1结束,不包括切分元素r
for(int j=p;j<=r-1;j++) {
if(A[j]<=x) {
temp=A[i];
A[i]=A[j];
A[j]=temp;
i=i+1;
}
}
temp=A[i];
A[i]=A[r];
A[r]=temp;
return i;
}
}
运行结果: