排序:挖坑快排前后指针快排

news/2025/2/14 6:16:22/

目录

挖坑快排: 

代码实现:

代码分析:

 前后指针快排:

​编辑动画分析: 

代码分析:

代码演示: 

快排的优化:三数取一 


挖坑快排: 

挖坑法,顾名思义,先把key这个标准值取出,随后之前key所在的位置就成为了坑位,然后和hoare的方法一样进行左右进行遍历

只不过不同的是当右边遇到比key小的数时,会把这个数取出,然后放入坑位所在的位置,随后被取出的那个数的所在位置就是新的坑位了 

 

代码实现:

代码分析:

当然,挖坑快排和快排一样,需要使用递归,而这里将递归变成了一个外部的调用函数,由挖坑排序返回最后的key值,再外部调用函数中进行分割序列然后递归调用。 

 前后指针快排:

前后指针的用法略微的巧妙和复杂,先设置两个指针,一个叫cur,一个叫prev

  • cur指针是查看是否有比key值小的元素,如果有遇见比key小的元素,则prev移动,随后将prev所处位置的元素和cur所处位置的元素交换,交换完成后cur往前移动。
  • 而若cur指针遇见比key值大的元素,则进往前移动。 
  • 最后cur越界后,将prev所处的位置元素和key所处位置的元素进行交换。 

动画分析: 

代码分析:

代码演示: 

快排的优化:三数取一 

快排的优化是针对与key取值的优化,也就说优化key这个数值的大小,使得这个数值本身就是一个不大不小的数值,以此来减少排序的次数,从而达到优化作用 

三数取一,最后返回的是下标,我们需要再一组序列的前端、后端以及中间位置的元素中找到一个不大不小的元素作为我们的中间值,随后用中间值和最左位置进行交换,从而将key值进行优化 (默认的key值都是最左端的数)


 


http://www.ppmy.cn/news/1264291.html

相关文章

Java获取本地IP和mac地址

经常在项目中遇到获取本地IP和mac的需求,下面给一个以java编写的例子,代码如下: import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException;public class N…

未用的引脚如何处理?--持续更新中

前言: 随着集成电路规模的越来越大,如今的大规模芯片都集成了很多功能模块,但是在实际的电路设计中我们又不可能把芯片所有的功能模块(或者说接口)全部用上,因此总会有或多或少的管脚会“用不上”,那这些未用的管脚一般…

安全扫描五项简介

目录 安扫五项 1.代码检测 2.主机基线 nginx合规检查 麒麟基线 3.WEB扫描 4.渗透测试 用户枚举漏洞 漏洞描述 修复建议 点击劫持漏洞 漏洞描述 修复建议 XSS漏洞 漏洞描述 修复建议 3.主机漏洞 超高危漏洞 高危漏洞 中危漏洞 低危漏洞 信息漏洞 参考信息…

Spring Boot学习随笔-SpringBoot的引言,回顾传统SSM开发

学习视频:【编程不良人】2021年SpringBoot最新最全教程 第一章、传统SSM开发回顾以及问题 Spring SpringMVC Mybatis SSM 实现一个简单功能 员工添加、查询… SSM项目简单实现 项目 需求分析 —>概要设计 —>(库表设计) —> 详细…

【FPGA】Verilog:计数器 | 异步计数器 | 同步计数器 | 2位二进制计数器的实现 | 4位十进制计数器的实现

目录 Ⅰ. 实践说明 0x00 计数器(Counter) 0x01 异步计数器(Asynchronous Counter)

Redis中持久化策略RDB与AOF优缺点对比

Redis持久化策略对比 RDBAOF持久化方式定时对整个内存做快照记录每一次执行的命令数据完整性不完整,两次备份之间存在丢失相对完整,取决于刷盘策略文件大小会有压缩,文件体积小记录命令,文件体积较大宕机恢复速度很快慢数据恢复优先级低,数据完整性不如AOF高,记录了执行命令数据…

python pyaudio显示音频波形图

python pyaudio显示音频波形图 代码如下: import numpy as np import matplotlib.pylab as plb import wave# 读取 wav wf wave.open("./output.wav", "rb")# 获取音频相关参数:声道数、量化位数、采样频率、采样帧数 nchannels,…

TCP对数据的拆分

应用程序的数据一般都比较大,因此TCP会按照网络包的大小对数据进行拆分。 当发送缓冲区中的数据超过MSS的长度,数据会被以MSS长度为单位进行拆分,拆分出来的数据块被放进单独的网路包中。 根据发送缓冲区中的数据拆分情况,当判断…