快速排序算法

public class MyQuickSort {
     
    public static void main(String[] args) {
     
        int[] arr = {
     12,45,1,23,6,89,78,23,5,6,78,78,6};
        System.out.println("开始排序");
        myQuick(arr,0,arr.length-1);
        System.out.println("结束排序");
        System.out.println("输出最后结果:");
        for(int i:arr){
     
            System.out.print(i+" ");
        }
    }

    public static void myQuick(int[] arr, int left, int right){
     
        if (arr == null) return; // 特殊情况1
        if (arr.length == 0) return;// 特殊情况2

        if (left>=right){
        // 临界条件
            return;
        }

        int L = left;
        int R = right;
        int pov = arr[L]; // pov代表中心轴

        while(L<R){
     
            while(arr[R]>=pov && R>L){
       // 这里必须 arr[R]>=pov ,不能是arr[R]>pov否则如果n(这里n表示arr[R])与pov相同的话 就不会执行R--的操作。 紧接着交换,再从左边比较,arr[L]还是这个n,从左边比较还是

                R--;
            }
            if(R>L){
     
                arr[L] = arr[R];
            }
            while(arr[L]<=pov && R>L){
       // 同理这里必须 arr[L]<=pov,不能是arr[L]
                L++;
            }
            if(R>L){
     
                arr[R] = arr[L];
            }
            if(L>=R){
     
                arr[L] = pov;
            }
            System.out.println("L"+L+" R"+R);
            for (int i:arr) System.out.print(i+" ");
        }
        myQuick(arr,left,R-1);
        myQuick(arr,R+1,right);
    }
}

你可能感兴趣的:(算法,快速排序)