首页 > 编程语言 > 详细

快速排序算法

时间:2020-07-14 17:53:35      阅读:48      评论:0      收藏:0      [点我收藏+]

一 、基本思想为

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

二、时间复杂度: 

       技术分享图片

 三、排序过程如图

 技术分享图片

 

四、代码实现

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!