一、解决方案
pv = 最后元素为基准点元素;
j:找比基准点元素小的,一旦找到就和i交换;
i:++,最后与pv交换,即为分区的位置。
递归调用,将基准点左边和基准点右边的元素分区排序,直到l>=h。
二、代码
public class QuickSort {
public static void main(String[] args){
int[] a = {5,3,7,2,9,8,1,4};
quick(a,0,a.length-1);
}
//递归实现
public static void quick(int[] a,int l,int h){
if(l>=h){
return;
}
int p = partition(a,l,h);
quick(a,l,p-1);
quick(a,p+1,h);
}
//一趟快排
private static int partition(int[] a,int l,int h){
int pv = a[h];
int i = l;
for (int j = l; j < h; j++) {
if(a[j]<pv){
swap(a,i,j);
i++;
}
}
swap(a,h,i);
System.out.println(Arrays.toString(a));
return i;
}
public static void swap(int[] a,int i,int j){
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}