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

    package sort;
    
    /**
     * 快速排序
     *
     * https://www.bilibili.com/video/av39519566?from=search&seid=14779126765886964608
     */
    public class QuickSort {
        public static void main(String arg[]) {
            int[] arr = {3, 5, 6, 3, 7, 9, 7, 4, 8, 0, 5};
            quickSort(arr, 0, arr.length-1);
            for (int e : arr) {
                System.out.println("e = " + e);
            }
        }
    
        private static void quickSort(int[] arr, int left, int right) {
            //左索引必须比右索引小
            if (left > right) {
                return;
            }
            //第一个数为基准数
            int bash = arr[left];
            //定义变量i,指向最左边
            int i = left;
            //定义变量j,指向最右边
            int j = right;
    
            //当i和j不相遇时,在循环中进行检索
            while (i != j) {
                //右边寻找比基准数小的数
                while (arr[j] >= bash && i < j) {
                    j--; //j从右往左移动
                }
    
                //左边寻找比基准数大的数
                while (arr[i] <= bash && i < j) {
                    i++;
                }
    
                //交换
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
    
            //此时i和j相遇
            //当i和j相遇时,交换基准数和相遇位置的元素
            arr[left] = arr[i];//相遇位置赋值给基准数
            arr[i] = bash;//基准数的值赋值给相遇位置
            /*
              此处习惯性写成base和arr[i]交换,错误原因是base这里只是临时变量,替换无意义
            所以是base之前的赋值项arr[left]来和arr[i]实现数组的交换
            */
    
            //基准数已经归位,左边比基准数小,右边大
            //继续排基准数左边和右边
            quickSort(arr, left, i - 1);
            quickSort(arr, i + 1, right);
        }
    }
    
    
  • 相关阅读:
    迷你资源管理器
    简单工厂和单例的一些事
    面向对象的七大原则
    继承和多态的一些事
    体检套餐系统
    信仰
    魔兽争霸系统
    优化MySchool总结习题
    事务,视图及索引
    [LeetCode] Combinations
  • 原文地址:https://www.cnblogs.com/xiongyungang/p/10468005.html
Copyright © 2011-2022 走看看