快慢指针java实现快速排序

今天学习数据结构快速排序时发现网上有很多种快速排序的方法,于是我选择了算法导论上面一种比较标准的快慢指针的方法实现了.

实现思路来自b站: https://www.bilibili.com/video/av47837026

import java.util.Arrays;

public class QuickSort {

    public static void quickSort(int []A,int low,int high){
        if(low>=high) return;   //如果一直拆分到只有一位就返回
        int pivot = A[high];    //将最右边的数字作为基准值
        int i=low-1;    // 慢指针i的作用是标记基准值最后应该在的位置
        for(int j=low;j<high;j++){  //由快指针j一直比较到基准值的前一位
            if(A[j]<pivot){ //如果该值小于基准值,那么就将i++,将该值,放到i的前面,也就是基准值位置的左面
                i++;
                int tmp = A[j]; A[j]=A[i]; A[i]=tmp;    //交换位置,将小的数放在左面
            }
        }
        int tmp = A[i+1]; A[i+1]=A[high]; A[high]=tmp;  //  最后将基准值放到合适的位置,也就是i的前面一位

        quickSort(A,low,i);     //递归的排列左边的部分
        quickSort(A,i+2,high);  //递归的排列右边的部分
    }

    public static void main(String[] args) {
        int []A = new int[]{3,2,5,6,7,9,5};
        quickSort(A,0,A.length-1);
        System.out.println(Arrays.toString(A));
    }
}
posted @ 2020-03-21 18:42  文戌  阅读(706)  评论(0编辑  收藏  举报