zoukankan      html  css  js  c++  java
  • 快速排序算法

    一 、基本思想为

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

    二、时间复杂度: 

           [公式]

     三、排序过程如图

     

    四、代码实现

    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 ;
        }
    }
  • 相关阅读:
    生成XML文件
    webService的发布与调用
    does not contain bitcode ShardSDK等三方库
    IOS在Document目录下创建文件夹、保存、读取、以及删除文件
    判断IOS安装后是否是第一次启动
    OC中使用单例模式
    两个时间(日期)段交集判断方法
    $(document).ready vs. $(window).load
    基于vant上传图片添加水印
    常用的正则校验
  • 原文地址:https://www.cnblogs.com/lean-blog/p/13299746.html
Copyright © 2011-2022 走看看