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

快排里面找基准值的算法

思路:先把数据里面第一个数据定义为基准值。我们要找到基准值左边比基准值小的数据(left)和基准值右边比基准值要大的数据(right)。

怎么把left和right的数据放到相应的位置里呢。

我们让left从前往后遍历,right从后往前遍历。left找比基准值大的数据,right找比基准值小的数据。找到之后left  right里面的数据交换位置。这样就可以把大的数据往后放,小的数据往前放。

当right走到超过left的时候,right里存着比基准值要小的数据,让right和基准值里面的数据交换位置,这个时候基准值左边都是小的数据,右边都是大的数据。

这个时候right里面存的数据就是我们的基准值。

注意:交换的时候要判断一下当前的right有没有走的超过right,因为有可能刚进循环的时候right没越界,但是循环完一次之后就越界了。

那  left  和基准值相等还要不要交换位置呢??

相等就没必要交换位置,但是如果一直往后遍历,就容易出界,所以要多加一个限制条件:left<=right  保证不出界。

如果数据全是一样的,按照前面相等就不交换位置的话,每一次分组就要从头开始遍历,享受不到二分法带来的便利了,所以我们就是相等也交换,这样能提高运行效率。

那当left和right相等的时候要不要交换呢???

比如上面这个情况left原来在7的位置,right在3的位置,走完之后都在9的位置,要是9和基准值换了之后就不符合排序的要求了。所以相等的时候继续进去,再走一轮right的位置就是基准值的位置了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • threadlocal的一些用法,以及如何解决可重入分布式redis锁
  • springboot系列教程(三十二):SpringBoot 教程之处理异步请求
  • Clickhouse篇之数据的备份与恢复
  • 基于R语言的统计分析基础:数据结构
  • Python编码系列—Python CI/CD 实战:构建高效的自动化流程
  • [数据集][目标检测]电力场景输电线异物检测数据集VOC+YOLO格式2060张1类别
  • html+css网页制作 自定义网站 钻石戒指:专业领域应用现状、前沿及发展展望、10个页面
  • 编写 prometheus exporter监控 mysql group replication
  • jmeter中导入java方法并使用
  • 奇文网盘项目对应windows版本的中间件下载,otp,rabbitmq,postgresql,onlyoffice(在线预览编辑等)
  • 深入理解WebSocket:从基础到实践
  • JavaScript中闭包详解+举例,闭包的各种实践场景:高级技巧与实用指南
  • 4.Redis单线程和多线程
  • Hiprint 打印插件在 Vue3 中的深度剖析
  • Linux磁盘操作之du命令
  • bearychat的java client
  • Docker: 容器互访的三种方式
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Git的一些常用操作
  • golang 发送GET和POST示例
  • java8 Stream Pipelines 浅析
  • nginx 配置多 域名 + 多 https
  • node.js
  • spark本地环境的搭建到运行第一个spark程序
  • Sublime text 3 3103 注册码
  • webpack4 一点通
  • windows-nginx-https-本地配置
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 对象管理器(defineProperty)学习笔记
  • 分布式事物理论与实践
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 算法-图和图算法
  • 王永庆:技术创新改变教育未来
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 中文输入法与React文本输入框的问题与解决方案
  • 阿里云服务器购买完整流程
  • ​Redis 实现计数器和限速器的
  • ​插件化DPI在商用WIFI中的价值
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • ###STL(标准模板库)
  • (007)XHTML文档之标题——h1~h6
  • (3)nginx 配置(nginx.conf)
  • (初研) Sentence-embedding fine-tune notebook
  • (三分钟)速览传统边缘检测算子
  • (算法设计与分析)第一章算法概述-习题
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)JAVA中的堆栈
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • **PHP分步表单提交思路(分页表单提交)
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .Net 6.0 处理跨域的方式
  • .NET C# 配置 Options
  • .NET Framework杂记
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法