• 排序-快速排序


    思想

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

    快速排序

    实现(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;
        }
    }
    

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

    参考资料

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

    最后

    此致,敬礼

  • 相关阅读:
    jquery实现章节目录效果
    Delphi里如何让程序锁定在桌面上,win+d都无法最小化
    php 之跨域上传图片
    delphi判断文件类型
    EmptyRecycle() 清空回收站
    delphi检查url是否有效的方法
    Explode TArray
    css设置中文字体(font-family:"黑体")后样式失效问题
    javascript-lessons
    课后作业2
  • 原文地址:https://www.cnblogs.com/numen-fan/p/10486363.html
Copyright © 2020-2023  润新知