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 ;
        }
    }
  • 相关阅读:
    设置开发环境
    安装开发软件
    学习路线
    预备知识
    Spring是什么
    yum安装nginx
    .net 哈希
    Excel文件处理Demo
    汉字处理组件
    Log4Net
  • 原文地址:https://www.cnblogs.com/lean-blog/p/13299746.html
Copyright © 2011-2022 走看看