news 2026/1/22 13:42:03

快速排序:10分钟掌握高效算法精髓

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
快速排序:10分钟掌握高效算法精髓

hello!大家好我会尽量每天跟大家持续更新,忙的时候可能会断更一天,非常感谢大家的点赞关注和支持!!!(这个基础算法会每天分享一个简单又详细)

基础算法(快速,归并)

快速排序的定义:

快速排序(Quick Sort)是一种高效的排序算法,基于分治法(Divide and Conquer)的思想。它的核心是通过选择一个基准元素(pivot),将列表分为两部分:一部分小于基准元素,另一部分大于基准元素,然后递归地对这两部分进行排序。快速排序的平均时间复杂度为 O(n log n),在实际应用中性能优异。

解释:

比如一个班级里面有10位同学,现在老师要按照高低进行排队(左低右边高),在10个里面随便挑一个为基准,然后在从基准左右边,开始一个一个的对比老师挑选的孩子基准(就比如调的最中间的)右边要查找低于基准,左边就查找高于基准(如果低于就放到基准左边)(高于就放到基准右边),这样全部查找完第一遍就会左边全部小于或者等于基准右边呢相反,无论排序第一遍(是否已经成功)(就是从低到高排列完基本上第一遍是不会的)这个基准最终位置就能定下来,因为左边都是低于他的右边都是高于他的,

接下来只需要,1.左边部分为一个整体,循环这个排序,2.右边部分也分为一个整体,循环这个排序最终就能完成。

步骤:

1.选择基准元素

从列表中选择一个元素作为基准(pivot)。选择方式可以是第一个元素、最后一个元素、中间元素或随机元素。

2.分区

将列表重新排列,使得所有小于基准元素的元素都在基准的左侧,所有大于基准元素的元素都在基准的右侧。基准元素的位置在分区完成后确定。

3.数组模拟栈来替代递归调用

对基准元素左侧和右侧的子列表分别递归地进行快速排序。就是可以用不是递归循环,就怕最坏的结果,就是刚好他们相等或者说是选的第一个是最大的右边都是最小的,这样递归深度太大容易导致栈溢出.

​​​​​​​4.合并:

由于分区操作是原地进行的,递归结束后整个列表已经有序。

首先呢,我们定义一个结构体Range,还有一个结构体函数new_Range(这个结构体函数可不是多余,我们如果说手动赋值容易出错,并且又可能产生冗余代码。)

/* 定义表示区间的结构体,包含起始和结束位置 */ typedef struct _Range { int start, end; } Range; /* 创建并返回一个新的Range结构体实例 */ Range new_Range(int s, int e) { Range r; r.start = s; r.end = e; return r; }

接下来就是核心代码:(默认从小到大排序)

void swap(int *x, int *y) { int t = *x; *x = *y; *y = t; }//这个是交换代码嘛,t就相当于空瓶子将两个值互换后函数结束t的生命周期也结束了.但*x,*y是接收我们指向的数组元素要用到指针

核心函数快速排序

第一步

创建函数加上参数(第一个数组,第二个是我们数组的长度为固定值),加上我们用动态内存来控制区间的分配,当然这个用数组也可以,但是visual studio 2022不兼容这个数组我放到下面重点讲数组(概念)虽然动态更好,我们只要了解这个算法就可以

数组就是:

Range r[len];就行用栈来控制,但是一般就是比较小大的话动态是最好,它的作用就是来存储我们要排序的子序列的下标.比如r[0]就是(strat,end),后面会用这个求出mid的值中间数区分左边区域和右边区域

不好意思这个里面也比较详细,可能手机看的话比较小一点,点开放大看好些

核心
1.进行我们的初始化我们创建的存储待排序子序列栈.
2.开始判断要排序的数组是否是超过0个是否符合逻辑,你们可以自己理解
3.求出我们的中间调出的值mid来平分,左右两边.
4.进入算法反向思维,左边大于中间值,也就是中间值小于左边的值,这样条件不成立就会找到需要交换位置的值,然后跳到下一个找右边的,反之亦然。
5.开始利用函数交换出来之后,就要进行下一步处理,判断我们左右2个子区域还有没有要进入待排序的,然后将我们的栈加一,到最面r[--p],就是将我们以及排序的子序列栈排出去.

打印函数:

这个输出函数用于检测,不多讲解了.

主函数:

这个就是初始化,调用.你也可以用开辟的空间来存储,你直接输入的,然后排序.这个你们可以私下里面尝试这做一下.

希望我们也可以相互学习,我就是一个小白,不过可以帮助大学里面学习的基础c语言免费回答感谢感谢!!!QQ群号:238038904(c语言和嵌入式学习讨论群)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/22 14:35:44

windows著名漏洞——Zerologon(零登录)

Zerologon(零登录) “Zerologon” 是一个网络安全领域内具有标志性的高危漏洞的俗称,其官方编号为 CVE-2020-1472。它的名字直观地揭示了其技术原理和可怕之处。 名称含义解析 Zero:代表“零”。在漏洞利用中,攻击者通…

作者头像 李华
网站建设 2026/1/19 16:01:54

6、技术写作风格与在线文档写作指南

技术写作风格与在线文档写作指南 1. 避免冒犯读者的写作风格 在写作过程中,风格的考量不应仅仅停留在个人偏好层面,还需注意可能冒犯读者的写作风格。以下几种情况需要特别留意: - 避免幽默 :在计算机文档写作中,作者很容易想在文本中加入幽默元素,但应抵制这种诱惑…

作者头像 李华
网站建设 2026/1/19 20:18:06

文章查重率超出限制?五个步骤轻松降低至安全线

论文重复率超30%?5个降重技巧,一次降到合格线 嘿,大家好!我是AI菌。今天咱们来聊聊一个让无数学生头疼的问题:论文重复率飙到30%以上怎么办?别慌,我这就分享5个实用降重技巧,帮你一次…

作者头像 李华
网站建设 2026/1/19 15:40:02

12、技术文档创作与信息管理全解析

技术文档创作与信息管理全解析 1. 第三方网站引用指南 在文档创作过程中,第三方网站可能是获取信息的重要来源。选择并引用合适的第三方网站,需要完成以下任务: - 确定要引用的第三方网站 - 确定要使用的第三方 URL - 添加免责声明和任何所需的第三方措辞 - 防止未经批…

作者头像 李华
网站建设 2026/1/17 16:45:06

9大AI论文平台对比:智能生成开题框架与完整论文内容

在毕业论文季,高效完成开题报告和论文是很多学子的痛点。人工写作虽然灵活,但耗时耗力;而AI工具的兴起,能快速生成内容、优化重复率和AI痕迹。今天,我通过9款平台对比,帮你找出最适合的“学术搭档”。先从人…

作者头像 李华
网站建设 2026/1/22 18:02:31

学术写作利器:9款AI工具测评,精准生成开题报告与论文初稿

在毕业论文季,高效完成开题报告和论文是很多学子的痛点。人工写作虽然灵活,但耗时耗力;而AI工具的兴起,能快速生成内容、优化重复率和AI痕迹。今天,我通过9款平台对比,帮你找出最适合的“学术搭档”。先从人…

作者头像 李华