堆排序与快速排序中容易被忽视的细节

简介:


改进的堆排序算法

以小堆为例,堆排序的简化过程如下
     1、初始化n个节点的二叉树为小堆
    2、把堆顶元素移除,将堆的最后一个元素A移到堆顶,从上至下将A下沉,直至二叉树为小堆。
    重复2,直至堆为空。

这是我们用到的堆排序算法,以习为常。但这个算法的效率还可以优化吗?且看第2步,堆的最后一个元素相对于根元素的两个子节点,有很大的概率比他们大,从概率的角度来看这种比较是不划算的,为什么要选这么一个较大元素进行下沉呢。于是,第2步可以做如下改进
 
    {
     a 移除堆顶元素,将一个空元素填到堆顶(可以将这个空元素理解为一个无限大的元素),
    b 比较空元素其两个子节点L和R,若L较小,则将L的值替换空元素,将L赋值为空。
    ... 重复b直至空元素下沉到堆的底部。
    c  若空白元素是最后一个元素,则删除空白元素。
       否则将空白元素与最后一个元素互换,然后删除空白元素,再将最后一个元素进行上浮(与其父元素比较,若父元素比其大,则元素互换并继续上浮)。
   
   }
这样做的好处是,只需要比较两个子节点的值(一个比另一个大的概率为50%,这种比较相对来说比较划算),最后元素只需要在最后一步做上浮的操作(因为最后一个元素本身较大,上浮时只需进行较少次数的比较)。
 
快速排序时间复杂度能做到再说推排序与快速排序 - panjianping1991 - peter pan的博客吗?

 快速排序我们会随机选取一个元素作为支点,将小于支点的元素移至支点的左端,将大于支点的元素移至右端。我们希望左右两边的元素个数趋于平衡。是否真的能达到这种平衡我们不妨从概率的角度来看一下。
将选取的支点元素计为A0,第k个与A0比较的元素计为Ak.则有
    P(A0>A1)=1/2.
    P((A0>A1)&&(A0>A2))=1/3.(任意的三个元素中,随机选取一个元素为最大元素的概率是1/3)
    P((A0>A2)|(A0>A1)) = P((A0>A1)&&(A0>A2))/P(A0>A1)=2/3 (贝叶斯公式:P(B|C)=P(BC)/P(C),也即若A0>A1,则A0>A2的概率为2/3)
也就是说,如果第一个与支点元素比较的元素小于支点元素,那么第二个与支点元素比较的元素小于支点元素的概率是2/3, 更进一步可以证明,如果前面M个与支点比较的元素都小于支点元素,那么第M+1个元素也小于支点元素的概率为(M+1)/(M+2).
所以快速排序每次分割,元素更倾向于向支点的某一边聚集,并不能做到近似的均匀分割,所以快排的平均时间复杂度达不到 再说推排序与快速排序 - panjianping1991 - peter pan的博客.

参考文档:http://users.aims.ac.za/~mackay/sorting/sorting.html
目录
相关文章
|
数据处理 Python
如何使用Python的Pandas库进行数据排序和排名
【4月更文挑战第22天】Pandas Python库提供数据排序和排名功能。使用`sort_values()`按列进行升序或降序排序,如`df.sort_values(by='A', ascending=False)`。`rank()`函数用于计算排名,如`df['A'].rank(ascending=False)`。多列操作可传入列名列表,如`df.sort_values(by=['A', 'B'], ascending=[True, False])`和分别对'A'、'B'列排名。
609 2
|
6月前
|
机器学习/深度学习 算法 关系型数据库
强化学习
强化学习(RL)是一种通过智能体与环境交互,以最大化累积奖励为目标的学习方法。核心包括状态、动作、奖励、策略与价值函数,依赖试错和延迟奖励机制。常见算法如Q-learning、PPO、DPO等,广泛应用于游戏、机器人及大模型训练。结合人类反馈(RLHF),可实现对齐人类偏好的智能行为优化。(239字)
|
3月前
|
人工智能 算法 搜索推荐
付阳老师“七步闭环法”GEO优化标准作业程序(SOP)深度解析
在AI搜索重构营销的当下,付阳老师首创《七步闭环法》GEO优化体系:以用户真需求为本,紧扣AI检索逻辑与EEAT原则,覆盖诊断、关键词、资料库、选题、创作、发布、迭代全流程,助力企业内容成为DeepSeek、文心等AI工具的“标准答案”,实现低成本、高信任、强占位的精准获客。(239字)
|
3月前
|
弹性计算 关系型数据库 数据库
2026年阿里云用户有哪些优惠权益?正价新购优惠券、免费试用、低价实例等优惠权益介绍
阿里云为个人开发者、企业客户及高校用户提供多维度权益支持,用户完成实名认证后可享受免费试用、低价实例、首次购买优惠及限时活动权益。个人认证用户享有130项免费试用权益,企业用户则享有150项专属权益,包括更高额度的ECS免费试用及云数据库等产品的免费体验。“低价实例购买权益”面向全量用户,支持低价续费;高校用户中,学生可领取300元无门槛券,教师完成认证后可享公共云产品五折优惠。
1111 5
|
3月前
|
人工智能 安全 API
1949AI 轻量化 AI 自动化 本地自动化工具 + 浏览器自动化 + Agent 自动化工具 小说连载生成技术实践
1949AI 轻量化 AI 自动化 本地自动化工具 + 浏览器自动化 + Agent 自动化工具 小说连载生成技术实践
|
4月前
|
存储 云安全 弹性计算
别买贵!2026阿里云服务器收费价格曝光:个人99元、学生免费、企业199元配置新鲜出炉
2026阿里云服务器价格曝光:个人新用户38元起/年,学生享300元无门槛代金券免费用云,企业199元起/年;支持年付、月付及按小时计费(低至0.34元/小时)。覆盖轻量应用服务器、ECS、GPU等全品类,含带宽、存储附加费用详解,助你精准降本。
1084 3
|
6月前
|
存储 Linux 数据处理
实用程序:基于Python+Tkinter开发表格比对&整理工具
一款基于Python+Tkinter开发的免费开源Excel处理工具,支持表格差异比对与错乱行整理,完整保留图片,兼容.xlsx和.csv格式。操作简单,支持自定义比对列、多线程处理,解决日常办公中数据比对、行合并及图片丢失等痛点,适用于各类Excel数据清理场景。(239字)
549 12
|
8月前
|
监控 前端开发 JavaScript
RUM实践-最大内容绘制(LCP)优化
LCP(最大内容绘制)衡量用户首次看到页面主内容的时间,理想值低于2.5秒。通过RUM工具收集数据,优化服务器响应、减少阻塞资源、图片压缩与预加载等手段,可有效提升LCP,改善用户体验。
|
安全 网络协议 应用服务中间件
AJP Connector:深入解析及在Apache HTTP Server中的应用
【9月更文挑战第6天】在Java Web应用开发中,Tomcat作为广泛使用的Servlet容器,经常与Apache HTTP Server结合使用,以提供高效、稳定的Web服务。而AJP Connector(Apache JServ Protocol Connector)作为连接Tomcat和Apache HTTP Server的重要桥梁,扮演着至关重要的角色
786 2
【寄存器开发速成】半小时入门STM32寄存器开发(二)
【寄存器开发速成】半小时入门STM32寄存器开发(二)
435 0