当前位置: 首页 > article >正文

排序:快速排序(hoare版本)

目录

快速排序:

概念:

动画分析: 

代码实现:

代码分析: 

代码特性:

常见问题:


快速排序:

概念:

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:

任取待排序元素序列中 的某元素作为基准值,按照该排序码将待排序集合分割成两子序列。

左子序列中所有元素均小于基准值,右 子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。 

动画分析: 

如上面动画所展示,选择数组最左端的元素作为基准值key ,又在数组的两端设置两个遍历变量进行数组的遍历。

左边的遍历负责查找比key大的数值,右边的遍历负责查找比key小的数值。

当左边遇到了比key大的值停下,等待右边遇到比key小的值,随后二者所指向的元素进行交换,进行多次操作,等到二者相遇后再将处在最左端的key值和相遇位置的元素进行交换。

这样做的目的是使用key值把整个数组进行了分隔,左端的元素都比key小,右端的元素都比key大。

随后便是将分隔的两部分 分别 进行刚才的操作,继续分隔成两部分直到不能再分隔位置。  

代码实现:

代码分析: 

代码特性:

常见问题:

  1. 遇到等于选项时该怎么办?
  2. key值是否会产生变动?
  3. 相遇时,如果条件没有达成可能不会停下。
  4. key易写成局部变量
  5. 第一趟的左端遍历变量的初始下标位置是0还是1?
  6. 遇到相等的元素是否需要停下遍历变量的前进循环?


http://www.kler.cn/news/161289.html

相关文章:

  • 分布式搜索引擎03
  • Docker 镜像构建的最佳做法
  • Rust国内sparse镜像源配置
  • 第十五届蓝桥杯模拟赛B组(第二期)C++
  • CAN总线协议编程实例
  • 前缀和例题:子矩阵的和AcWing796-Java版
  • Spark - 输出parqute文件
  • 漫谈Uniapp App热更新包-Jenkins CI/CD打包工具链的搭建
  • 【刷题日志】牛客 HJ73 计算日期到天数转换
  • Canvas鼠标画线
  • java字符串String类的常用方法
  • Swift 中 User Defaults 的读取和写入
  • 商家门店小程序怎么做?门店小程序的优势和好处
  • Docker 一些设置
  • zabbix配置snmp trap--使用snmptrapd和Bash接收器--图文教程
  • Android启动界面之isTaskRoot的妙用及Deeplink的处理
  • 从文字到使用,一文读懂Kafka服务使用
  • macOS 13.6上Sublime无法使用Package Control问题
  • Vue3 Element-Plus 一站式生成动态表单:简化前端开发流程
  • 浅谈https
  • jQuery的入口函数
  • Java毕业设计源码—vue+SpringBoot图书借阅管理图书馆管理系统
  • 10_企业架构NOSQL数据库之MongoDB
  • [ffmpeg] find 编码器
  • 最新GM/T 0126-2023《HTML密码应用置标语法》等25项密码行业标准
  • QML优化,当列表数据过多时,切换tab可能会导致卡顿的情况。
  • StarRocks 存算分离最佳实践,让降本增效更简单
  • Tomcat的初步学习
  • OPC UA客户端工具UaExpert使用
  • Qt 输入一组数,排序后用柱状图显示