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

快速排序(含hoare版本、挖坑版本和前后指针版本)

2.快速排序
快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。

2.1:思路1:(hoare版本):
定义一个左右下标,然后让左边的值等于key,让右边的下标先移动,找到比key小的值,然后左边的在下标移动找到比
key大的值,然后两个值进行交换,最后两个下标相遇的地方那个值一定比key小,然后与key交换就完成了依次循环,然后对key左区间和右区间进行重复上述操作(递归)

 

注:
左边左key,右边先走,相遇点一定比key小
情况一:右边先走,找到了小,左边再走,左边没找到大,然后两个相遇,相遇点一定比key小
情况二:右边先走,然后找小,没有找到,然后相遇左边,要么就是key,要么就是上一次交换的比key小的值
依次类推:右边左key,那么左边先走


测试horea版本

horea版本代码

快速排序
1.思路1:(hoare版本):
定义一个左右下标,然后让左边的值等于key,让右边的下标先移动,找到比key小的值,然后左边的在下标移动找到比key大的值,然后两个值进行交换,最后两个下标相遇的地方那个值一定比key小,然后与key交换就完成了依次循环,然后对key左区间和右区间进行重复上述操作(递归)

 

hoare版本的快速排序最坏的情况是逆序或者顺序(这种情况下建立栈帧会发生栈溢出)


可以以下优化(随机选key)
优化思路:随机产生一个中间位置的数,然后加上它的做下标left得到这个数,然后和left进行交换,使得left还是作为key,但是key的值变了

代码如下:(随机选key)

 

 

思路2:(挖坑法)
先将左边第一个数取出保存为key,形成一个坑位,然后右边先开始移动找比key小的数,然后把它往左边的坑位填,然后坑位变成右边的那个下标,然后左边在找比key大的数,然后进行坑位和数字交换,依次类推,到最后相遇的位置
注:把key填入坑位,并且他们相遇点一定是坑

测试挖坑法版本

挖坑版本代码: 

 

思路3:(前后指针版本)【最优】
给定两个指针prev和cur
1、cur找到比key小的值,++prev,cur和prev位置的值交换,++cur
2、cur找到比key大的值,++cur
3.最后把prev上的值和key交换位置
说明:
1、prev要么紧跟着cur(prev下一个就是cur)
2、prev跟cur中间间隔着比key大的一段值区间

 

测试前后指针法版本

前后指针法版本代码

 

2.2快速排序的特性总结: 
1. 快速排序整体的综合性能和使用场景都是比较好的,所以才敢叫快速排序
2. 时间复杂度:O(N * logN)


3. 空间复杂度:O(logN)
4. 稳定性:不稳定 

 

 

http://www.dtcms.com/a/414439.html

相关文章:

  • LeetCode:77.买卖股票的最佳时机
  • Apache Airflow:让复杂工作流自动化变得简单优雅
  • 精读《C++20设计模式》——创造型设计模式:原型模式
  • IDEA配置Maven教程
  • OpenLayers地图交互 -- 章节十五:鼠标滚轮缩放交互详解
  • [Python编程] Python3 错误与异常
  • 动态代理 java原生 vs Cglib
  • MQTT协议基础知识速成(智能家居项目)
  • 北京网站建设认知网络推广公司服务内容
  • 爬虫疑难问题解决方案整理
  • 如何制作PDF文件目录?
  • 左右翻网站模版网页美工设计教程
  • 牛客小白月赛121
  • 深入理解目标文件:从ELF格式到链接核心
  • Java系列知识之 ~ Spring 与 Spring Boot 常用注解对比说明
  • 郫县建设局网站wordpress如何运行
  • LeetCode 114.二叉树展开为链表
  • 机器人中的电机与扭矩入门
  • 站长平台如何推广自己的网站怎么做网页版网站
  • 深入理解BFC:解决margin折叠和浮动高度塌陷的利器
  • Spec Kit - 规范驱动开发工具包
  • 具有价值的常州做网站免费进销存软件哪个简单好用
  • creo二次开发seo职位信息
  • Windows 10 环境下 Redis 编译与运行指南
  • 【编号206】房地产统计年鉴2002~2023
  • 某大型广告公司实习感受
  • 【Day 68】Zabbix-自动监控-Web检测-分布式监控
  • 企业网站建设公司公司网站开发客户挖掘
  • 天拓四方集团IOT平台:赋能电气设备制造商数智化转型新引擎
  • 【STM32项目开源】基于STM32的智能鱼缸养殖系统