一、解决方案
    pv = 最后元素为基准点元素;
    j:找比基准点元素小的,一旦找到就和i交换;
    i:++,最后与pv交换,即为分区的位置。
    递归调用,将基准点左边和基准点右边的元素分区排序,直到l>=h。
    二、代码

    1. public class QuickSort {
    2. public static void main(String[] args){
    3. int[] a = {5,3,7,2,9,8,1,4};
    4. quick(a,0,a.length-1);
    5. }
    6. //递归实现
    7. public static void quick(int[] a,int l,int h){
    8. if(l>=h){
    9. return;
    10. }
    11. int p = partition(a,l,h);
    12. quick(a,l,p-1);
    13. quick(a,p+1,h);
    14. }
    15. //一趟快排
    16. private static int partition(int[] a,int l,int h){
    17. int pv = a[h];
    18. int i = l;
    19. for (int j = l; j < h; j++) {
    20. if(a[j]<pv){
    21. swap(a,i,j);
    22. i++;
    23. }
    24. }
    25. swap(a,h,i);
    26. System.out.println(Arrays.toString(a));
    27. return i;
    28. }
    29. public static void swap(int[] a,int i,int j){
    30. int tmp = a[i];
    31. a[i] = a[j];
    32. a[j] = tmp;
    33. }
    34. }