欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java中的快速排序

程序员文章站 2022-03-16 19:04:53
...
public class KUSUPaixu {
    public static void main(String[] args) {
        int [] a = suzu();
        System.out.println(Arrays.toString(a));
        paixu(a);
        System.out.println(Arrays.toString(a));
    }

    private static void paixu(int[] a) {
        /*
         * 快速排序
         * *) 随机挑选一个值,作为基准值
         * *) 比基准值小的,交换到左侧,
         *    比基准值大的,交换到右侧
         * *) 对左侧执行相同运算
         * *) 对右侧执行相同运算
         */
        soulPaixu(a,0,a.length-1);
    }
    private static void soulPaixu(int[] a, int lo, int hi) {
    //最简问题,范围最小时,结束递归
        if(lo>=hi) {
            return;
        }
        //用第一个值作为基准值
        int mid=a[lo];
        int i=lo;
        int j=hi;
        while(i<j){
            while (a[j]>mid&&i<j){
                j--;
            }
            a[i]=a[j];
            while (a[i]<=mid&&i<j){
                i++;
            }
            a[j]=a[i];
        }
        //循环结束后,i,j重合
        //把基准值,放入i位置
         a[i]=mid;
        //对左侧递归处理
        soulPaixu(a,lo,i-1);
        //对右侧递归处理
        soulPaixu(a,i+1,hi);
    }

    private static int[] suzu() {
        int [] a =new int[10];
        for (int i=0;i<a.length;i++){
            a[i]= new Random().nextInt(100);
        }
        return a;
    }
}