快速排序-java版(快排)

2023-05-16

算法本质

快排属于交换排序,快排的基本思想是基于分治的。快排的本质就是通过一趟排序将基准数排到最终的位置。即以基准数为中心将待排序的序列划分成两个子序列,一个子序列是基准数前面的数,都比基准数小;一个子序列是基准数后面的数,都比基准数大。然后递归的对两个子序列重复上述过程。即所有元素都在最终位置上

tips:快排里的基准数也可以理解枢轴,通常取首元素,也可尾元素。
tips:一趟排序也可叫为一次划分。

算法思路

1.左右各有一个指针,首元素作为基准数
2.左侧指针不断右移,右指针也不断左移,将左边比基准数大的数和右边比基准数小的数交换,直到两个指针重合,基准数归位指针重合的位置。成功将表以基准数为中心一分为二
3.然后两个子表递归执行上述过程

代码

首元素作为基准数

public class MyQuiteSortDemo {
    public static void main(String[] args) {
        int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};

        quickSort(arr,0,arr.length-1);

        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

    private static void quickSort(int[] arr, int left, int right) {
     	// 递归结束的条件
        if(right < left){
            return;
        }

        int left0 = left;
        int right0 = right;

        //计算出基准数
        int baseNumber = arr[left0];

        while(left != right){
//        1,从右开始找比基准数小的
            while(arr[right] >= baseNumber && right > left){
                right--;
            }
//        2,从左开始找比基准数大的
            while(arr[left] <= baseNumber && right > left){
                left++;
            }
//        3,交换两个值的位置
            int temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
        }
        //基准数归位
        int temp = arr[left];
        arr[left] = arr[left0];
        arr[left0] = temp;
      
		// 递归调用自己,将左半部分排好序
        quickSort(arr,left0,left-1);
      	// 递归调用自己,将右半部分排好序
        quickSort(arr,left +1,right0);

    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快速排序-java版(快排) 的相关文章

随机推荐

  • log4j2配置文件详解及实战部分配置

    注 xff1a 原文转载链接出自 xff1a log4j2配置文件详解 牧凡的天空 CSDN博客 log4j2配置文件详解 一 关于配置文件的名称以及在项目中的存放位置 log4j 2 x版本不再支持像1 x中的 properties后缀的
  • 最短路径问题---Dijkstra算法详解

    此文章转载自 xff1a https blog csdn net heroacool article details 51014824 迪杰斯特拉 Dijkstra 算法是典型最短路径算法 xff0c 用于计算一个节点到其他节点的最短路径
  • Linux使用grep指令的时候汉字出现乱码

    今天在使用grep在文件中查找包含特定汉字的数据时总是出现乱码 不管是手动敲进去还是复制粘贴都不行 xff0c 不仅如此添加 删除汉字串等编辑操作也是特别混乱 在网上找了很多解决方案都不靠谱 xff0c 最后用了下面的方法解决啦 才知道是个
  • SQL-mysql设置utf8编码方法

    mysql gt SHOW VARIABLES LIKE 39 character set 39 43 43 43 Variable name Value 43 43 43 character set client latin1 chara
  • windows connect()返回错误的代码10061的解决办法

    即还没有开启服务器端 开启服务器端就可以了
  • Python爬虫(二)——爬取电影天堂,保存下载地址

    首先我们开始要分析一下 xff0c 下载种子我们需要哪几步 xff1a 获取所有电影页的访问地址获取电影页源码提取出下载地址将下载地址保存 首先第一步 xff0c 我们来分析一下电影天堂网站的结构 xff0c 发现他跟我们的古诗文网还是非常
  • [Android 基础] -- SELinux/SEAndroid 实例简述(三) 实例看 SELinux/SEAndroid

    扩展 xff1a 在传统的 Linux 系统中 xff0c 每一个应用程序都对应有一个可执行文件 在这种情况下 xff0c 我们就可以在安全策略中设定一个规则 xff1a 当一个可执行文件加载到一个进程中执行时 xff0c 该进程的安全上下
  • 水浒传水果拉霸类游戏物体旋转思路

    lt p gt 这种模式很常见 xff0c 也可以衍生类似的抽奖系统之类 xff0c 以水浒传为例 xff0c 市面上的水浒传有多种表现形式 xff0c 我见到过主要的两种 xff1a 一种是分为15个格子 xff0c 每个格子之内做单独自
  • 《离散数学》知识点总结

    离散数学 文章目录 离散数学 x1f921 命题 命题概念 x1f412 联结词 x1f6be 范式 x1f615 推理 x1f47b 谓词逻辑 综合复查知识点 x1f921 命题 命题概念 具有唯一真值的陈述句 1 感叹句 疑问句 祈使句
  • Python Scrapy中yield Request的理解

    最近在看 learn scrapy 中的关于爬虫的部分 xff0c 对于parse中的yield Request用法不是很理解 xff0c 现在总结下 lt pre gt lt pre name 61 34 code 34 class 61
  • MS COCO数据集人体关键点评估(Keypoint Evaluation)(来自官网)

    COCO系列文章 xff1a MS COCO数据集目标检测评估 xff08 Detection Evaluation xff09 xff08 来自官网 xff09 MS COCO数据集人体关键点评估 xff08 Keypoint Evalu
  • Unity VR游戏开发干货教程:VR中的交互方式

    游戏程序 平台类型 虚拟VR 程序设计 编程语言 引擎 SDK Unity3D 2D GameRes游资网授权发布 文 王寒 在VR项目中 xff0c 我们需要在用户 凝视 某个物体时将其激活 在VRSamples中 xff0c 我们构建了
  • 汉诺塔算法 ----C++语言递归实现

    起源 汉诺塔 xff08 又称河内塔 xff09 问题是源于印度一个古老传说的益智玩具 大梵天创造世界的时候做了三根金刚石柱子 xff0c 在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘 大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆
  • 解决ubuntu18.04环境下无法调整分辨率的问题

    解决ubuntu18 04环境下无法调整分辨率的问题 问题来源 一般ubuntu环境下不能调整分辨率主要是因为显卡驱动出问题 xff0c 所以本文通过执行显卡驱动相关的操作解决分辨率的问题 解决问题 如果电脑上还没有安装过显卡驱动 参考这篇
  • web-绑定event事件比较

    HTML中为按钮绑定event方式有三种 xff1a eg xff1a lt button type 61 34 submit 34 id 61 34 btn submit 34 gt submit lt button gt 一 使用jQu
  • cas的overlay插件的理解以及内置的tomcat升级记录

    参考文档 xff1a https blog csdn net hewusheng10 article details 108328013 最近参与的门户项目中 xff0c 涉及到多个业务系统单点登录功能 xff0c 于是使用了cas作为单点
  • su不用输入密码

    su命令 作用 su 为switch user 背景 平时开发在测试环境调测 xff0c 因为操作系统都是被加固的 xff0c su切换用户需要输入命令 xff0c 很麻烦 xff0c 如何su切换不输入命令勒 xff0c 操作如下 操作
  • AOP详解

    文章目录 目录 前言 二 设计模式 三 名词解释 四 代码 方式一 方式二 方式三 xff1a 注解 总结 前言 Spring的两大核心是IOC和AOP xff0c 其中IOC是指控制反转 xff0c 指的是bean对象无需用户手动维护 x
  • Opencv中的Mat类使用方法总结

    此文章转载自 xff1a http lib csdn net article opencv 42000 今天在看Opencv的SIFT源码 xff0c 至于有关于SIFT算法的博客还没有写完 xff0c 等着我把源码看完再一起写完吧 之前用
  • 快速排序-java版(快排)

    算法本质 快排属于交换排序 xff0c 快排的基本思想是基于分治的 快排的本质就是通过一趟排序将基准数排到最终的位置 即以基准数为中心将待排序的序列划分成两个子序列 xff0c 一个子序列是基准数前面的数 xff0c 都比基准数小 xff1