• 首页

  • 归档

  • 分类

  • 标签

  • 喵星人

  • 心情

  • 关于
W e A r e F a m i l y ! m i a o ~
W e A r e F a m i l y ! m i a o ~

柴子

青春流逝,记录往昔

11月
11
算法

排序算法-快速排序

发表于 2021-11-11 • 字数统计 1075 • 被 196 人看爆

quickSort.gif

  • 核心思想:选择一个基准值,然后将所有值一分为二,小于它的左分区,大于它的右分区,把它放左分区的队尾或者放右分区的对头,这样起码保证它自己到了它该在的位置上,然后对剩下的分区递归,重复上述步骤,每次保证基准值能到正确位置,直至所有都有序。

  • 时间复杂度:O(nlogn)

  • 空间复杂度:O(1)

   /**
     * 快速排序
     *
     * @param arr
     * @param left
     * @param right
     */
    public static void quickSort(int[] arr, int left, int right) {
        if (left >= right) {
            return;
        }
        int basic = partition(arr, left, right);
        quickSort(arr, 0, basic - 1);
        quickSort(arr, basic + 1, right);
    }

    private static int partition(int[] arr, int left, int right) {
        int basic = right; //选取队尾作为基准值
        for (int i = right - 1; i >= left; i--) {
            if (arr[i] > arr[right]) {
                basic--;//只要有比它大的,它正确位置就应该向左移动
                swap(i, basic, arr);
            }
        }
        //循环结束后,比基准大移动到了basic下标的后面
        //把基准值换到basic位置
        swap(right, basic, arr);
        //此时,基准值到了它应该在的位置
        return basic;
    }

分享到:
算法题-随机函数01
排序算法-插入排序
  • 文章目录
  • 站点概览
柴子

内蒙 柴子

what do U want?

Github QQ Email RSS
最喜欢的电影
最喜欢的游戏
最喜欢的音乐
最喜欢的图书
最喜欢的动漫
夏洛特的烦恼
英雄联盟
痴心绝对
数据库从入门到删库跑路
斗破苍穹
看爆 Top5
  • 微信getUserProfile兼容性调整以及uniapp写法 1,866次看爆
  • gateway转发微服务请求丢失header参数 855次看爆
  • mybatis-plus代码生成器 848次看爆
  • Spring Boot Security从入门到进阶到高级 444次看爆
  • 物业报修系统设计-简化版 425次看爆
转载注明出处

站点已萌萌哒运行 00 天 00 小时 00 分 00 秒(●'◡'●)ノ♥

Copyright © 2022 柴子 京ICP备17035556号-1

由 Halo 强力驱动 · Theme by Sagiri · 站点地图