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

交换排序——冒泡排序与快速排序

笔者把源码放在github上了:z-yi-han/Fundamentals-of-Data-Struct: 这是新人用来记录自己的数据结构学习的过程

今天,笔者带领大家学习交换排序,交换排序有两种,一种是冒泡排序,一种是快速排序。首先笔者带着大家快速过一遍冒泡排序:就是遍历整个数组然后让较大的数放在后面,从而实现冒泡的效果,由于读者都比较熟悉,笔者不再过多赘述,直接看一看代码即可:

下面是快速排序,也是本文的重点,快速排序是一个实现起来很麻烦的排序。首先,我们先知道什么是快速排序:快排是一种效率较高的交换排序,定义是选定一个key,然后左边找大,右边找小,从而实现升序排序的目的:

就是这样开始即可,然后左找大,右找小,先让R(right)出发,然后每个值和key对比,如果这个值比key小,那就停止,然后L(left)开动,和key继续比较,直到对应的值大于key时,停,此时right小于ker,left大于key,二者交换位置,这样就会让比key小的往左,比key大的往右,然后继续走,依旧这样进行,直接二者相遇,二者一定会相遇,后面笔者会再证明,遇到之后,把key和相遇位置交换,这样就保证了升序排序。下面证明一下不管奇数偶数二者都会相遇:首先,我们要知道,这其实是一个区间问题,我们之所以不确定二者会不会遇上,就是因为觉得会有偶数情况导致碰不上,但是实际上,这种情况并不存在,看下面的逻辑:

如果 L < R:说明还能继续交换;如果 L == R:说明两边已经扫描到同一个位置了,这时停止,基准值放到这个位置上;如果 L > R:代表划分完成(这时候就是区间结束了)。 下面先把这一段的代码写完,然后再考虑整体代码:

这是在进行运动,然后考虑到终点时的操作:

笔者带领读者慢慢捋一下代码思路,首先我们在上面进行了左找大,右找小,然后碰上之后停止了,然后因为while循环继续进行,一直到end和begin碰上了,停止,停止之后呢,需要把keyi和 相遇位置交换,也就是如图所示的Swap,不过需要注意的是,交换的是地址和数组对应的值,但是基准下标并没有变化,因为基准要进行变化,所以要赋值给keyi begin(也就是相遇的下标),下面其实就是递归了,这部分内容相信读者经过二叉树的学习之后就很容易理解了,只不过需要注意一点,那就是区间的划分,经过刚才的操作,其实keyi这个位置已经排序完成了,所以不用动了,再次划分区间的时候就是从最左边到keyi-1,keyi+1到最右边,然后再次排。序就行了,我们可以思考这个递归思想,只剩一个的时候自然递归结束。

下一篇文章笔者带大家对快速排序进行一些优化,希望读者持续关注。


文章转载自:

http://KP26e6Ug.dLhxj.cn
http://L7olGHhS.dLhxj.cn
http://tYWU58Cr.dLhxj.cn
http://nCuWzQvC.dLhxj.cn
http://GmKStcKM.dLhxj.cn
http://sQI4oKTd.dLhxj.cn
http://Q6SeuU4L.dLhxj.cn
http://YAbuZpC5.dLhxj.cn
http://P68h0quX.dLhxj.cn
http://uD7bb6Ik.dLhxj.cn
http://wZnyiBts.dLhxj.cn
http://9kqv1UkT.dLhxj.cn
http://k9UUw2gs.dLhxj.cn
http://KSEExkLc.dLhxj.cn
http://Ve1ok2GG.dLhxj.cn
http://ZoSLmoFA.dLhxj.cn
http://BmDExTYR.dLhxj.cn
http://i1vu7C5q.dLhxj.cn
http://oWlgIqUG.dLhxj.cn
http://j14AkjH9.dLhxj.cn
http://tRKw8we1.dLhxj.cn
http://BmIfsNHE.dLhxj.cn
http://HY4WGDPw.dLhxj.cn
http://Uh4ziY2g.dLhxj.cn
http://A5yoWpB7.dLhxj.cn
http://qabedxAs.dLhxj.cn
http://MT5KWRCo.dLhxj.cn
http://HcpfRVpM.dLhxj.cn
http://eecaRzrZ.dLhxj.cn
http://mO2DOUX0.dLhxj.cn
http://www.dtcms.com/a/375975.html

相关文章:

  • DIY项目-校遇
  • GEO 优化系统开发:技术架构与核心实现方案
  • 【66页PPT】质量管理体系五种核心工具APQP(附下载方式)
  • MySQL InnoDB Cluster介绍,MHA、PXC、InnoDB Cluster怎么选?一文讲透MySQL高可用方案最佳实践
  • Miniconda3搭建Selenium的python虚拟环境全攻略
  • 01背包,完全背包,分组背包,多重背包例题
  • Ansible之playbook
  • MapReduce :Map阶段分区后,数据怎么找到Reducer?
  • 项目研发实录:电子称SDK封装dll给到QT和C#调用
  • 短视频矩阵源码-视频剪辑+AI智能体开发接入技术分享
  • 代码随想录算法训练营第三十五天|背包问题 二维 背包问题 一维 46. 携带研究材料 416. 分割等和子集
  • FTP文件传输服务
  • 代码随想录第七天|● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 18.四数之和
  • SAP R/3系统模块结构
  • leetcode 217 存在重复元素
  • 前端 Word 模板参入特定数据 并且下载
  • LeetCode 003. 无重复字符的最长子串 - 滑动窗口与哈希表详解
  • 深度学习(五):过拟合、欠拟合与代价函数
  • 【JS】import.meta.env,process.env,window三种环境变量获取方式的区别
  • 交付只是起点:从“纸上蓝图”到“价值闭环”的保障实践,数字孪生保障落地的“三重防护网
  • LLM大模型-大模型 API 集成使用、部署本地大模型(huggingface、modelscope)、实现Qwen和Deepseek本地部署
  • Redis的入门与应用
  • pybind11错误书
  • 在 PostgreSQL中查看有哪些用户和用户权限
  • ctfshow- web入门-XXE漏洞
  • 六级第二关———坐地铁(1)
  • 实用 html 小工具
  • C#(链表创建与原地反转)
  • 光伏MPPT——拓扑结构及发波方式
  • Flink通讯超时问题深度解析:Akka AskTimeoutException解决方案