快速排序算法

一 、基本思想为

     快速排序 -拆分排序,取一个标准值,比这个值小的放到这个数据的左边,大的放到值得右边,然后递归这个标准值左边和右边的数组再次进行排序

二、时间复杂度: 

       [公式]

 三、排序过程如图

 

四、代码实现

public class Test3 {

    public static void main(String[] args)   {

        int[] arrs = { 4,6,7,3,2,1 ,5,8 };
        paixu(arrs,0,arrs.length-1);
        System.out.println( arrs );
    }

    /**
     * 说明:快速排序 -拆分排序,取一个标准值,比这个值小的放到这个数据的左边,大的放到值得右边,然后递归这个标准值左边和右边的数组进行排序
     * 如: 4,6,7,3,2,1 ,5,8  排序,
     * 1 取集合最后个值8作为基准值
     * 2 定义数组中放比基准值小的数组的位置i=0(遍历除了基准值以外的数据,每次与基准值对比,小的数据则放到i这个位置,i随后加一)
     * 3 遍历剩下的所有数据 4,6,7,3,2,1 ,5,
     * 每个数据值与基准值8进行对比,如果比基准值8小则放到位置 i 上,然后i加上1
     * 4 遍历结束以后,将基准值放到位置 i 上,此时i 左边都比基准值小,i右边都比基准值大
     * 5 递归 遍历 i 左边 和右边的数组
     * @param arr
     * @param left
     * @param right
     */
    private static  void paixu(int[] arr ,int left ,int right ){
        if(left < right ){
            int i=left; //保存比标准值小的数据下标
            int j=left ;//遍历
            int ph = arr[right];
            for(  ;j<right;j++ ){
                if( arr[j]<ph ){
                    swap(arr,i,j );
                    i++ ;
                }
            }
            swap(arr , right ,i );

            paixu(arr,left ,i-1 );
            paixu(arr, i+1 ,right);

        }
    }

    private  static void swap(int[] arr , int i ,int j ){
        int tmp = arr[i];
        arr[i]=arr[j];
        arr[j]= tmp ;
    }
}
原文地址:https://www.cnblogs.com/lean-blog/p/13299746.html