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

    思想

    快速排序每一趟排序,都会寻找一个基准元素,有的采用第一个元素,有的会随机生成一个,但是基本思想是不变的,一趟排序结束,会形成以基准元素为分界点的两部分,其中左边比基准元素小(假设从小到大排序),右边比基准元素大。然后再以相同的方法处理左边和右边两部分,即递归。

    快速排序

    实现(java)

    import com.jiajia.ArrayUtil.ArrayUtil;
    /**
     * @ClassName: QucikSortMain
     * @Author: fanjiajia
     * @Date: 2019/3/6 下午9:02
     * @Version: 1.0
     * @Description: 快速排序
     */
    public class QucikSortMain {
    
        public static void main(String[] args) {
    
            int[] arr = {4,2,35,9,7,8,1,5,0,4,3};
            quickSort(arr, 0, arr.length - 1);
            ArrayUtil.print(arr);
        }
    
        private static  void quickSort(int[] arr, int left, int right){
    
            if (left >= right) {    // 必须加
                return;
            }
    
            int temp = arr[left]; // 以左边的元素为基准元素
            int i = left, j = right; // i,j为两个游标
            while (i < j) {
                while (i < j && arr[j] >= temp){ // 右边先走
                    j--;
                }
                while (i < j && arr[i] <= temp) {
                    i++;
                }
                if (i < j) {
                    swap(arr, i, j);
                }
            }
            arr[left] = arr[i]; // 注意,这一步必须要,填上最左边的坑
            arr[i] = temp; // 基准元素就位
            quickSort(arr, left, i - 1);    // 递归操作左边部分
            quickSort(arr, i + 1, right);   // 递归操作右边部分
        }
    
        /**
         * 交换两个元素
         * @param arr
         * @param i
         * @param j
         */
        private static void swap(int[] arr, int i, int j) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    

    很多方法会写成两个函数,一个用来返回一趟结束后基准元素的位置,然后一个外围函数用来递归,其实和这个类似,其实就是将后面两个递归函数之前的部分封装成一个函数而已!

    参考资料

    快速排序(过程图解)
    白话经典算法系列之六 快速排序 快速搞定
    值得收藏的十大经典排序算法

    最后

    此致,敬礼

  • 相关阅读:
    让mysql查询强制走索引
    【转】起始时间和终止时间,循环输出每天
    【转】31个实用的find命令
    Hive数据倾斜解决办法总结
    网站架构之可扩展性
    网站架构之高可用性
    网站架构之可伸缩性
    kafka中的消费组
    MySQL知识点小结
    [数据挖掘]用户画像
  • 原文地址:https://www.cnblogs.com/numen-fan/p/10486363.html
Copyright © 2011-2022 走看看