




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
堆排序及算法分析 前言前言 记得在学习数据结构的时候一味的想用代码实现算法 重视的是写出来的代码有一个正确 的输入 然后有一个正确的输出 那么就很满足了 从网上看了许多的代码 看了之后貌 似懂了 自己写完之后也正确了 但是不久之后就忘了 因为大脑在回忆的时候 只依稀 记得代码中的部分 那么的模糊 根本不能再次写出正确的代码 也许在第一次写的时候 是因为参考了别人的代码 看过之后大脑可以进行短暂的高清晰记忆 于是欺骗了我 以 为自己写出来的 满足了成就感 可是代码是计算机识别的 而我们更喜欢文字 图像 所以我们在学习算法的时候要注重算法的原理以及算法的分析 用文字 图像表达出来 然后当需要用的时候再将文字转换为代码 记忆分为三个步骤 编码 存储和检索 就以 学习为例 先理解知识 再归纳知识 最后巩固知识 为了以后的应用而方便检索知识 堆排序过程堆排序过程 堆分为大根堆和小根堆 是完全二叉树完全二叉树 大根堆的要求是每个节点的值都不大于其父节点 的值 即 A PARENT i A i 在数组的非降序排序中 需要使用的就是大根堆 因为 根据大根堆的要求可知 最大的值一定在堆顶 既然是堆排序 自然需要先建立一个堆 而建堆的核心内容是调整堆 使二叉树满足堆的 定义 每个节点的值都不大于其父节点的值 调堆的过程应该从最后一个非叶子节点最后一个非叶子节点开 始 假设有数组 A 1 3 4 5 7 2 6 8 0 那么调堆的过程如下图 数组下标从 0 开始 A 3 5 开始 分别与左孩子和右孩子比较大小 如果 A 3 最大 则不用调整 否则和孩 子中的值最大的一个交换位置 在图 1 中是 A 7 A 3 A 8 所以 A 3 与 A 7 对换 从 图 1 1 转到图 1 2 所以建堆的过程就是 1 for i headLen 2 i 0 i 2 3 do AdjustHeap A heapLen i 调堆 如果初始数组是非降序排序 那么就不需要调堆 直接就满足堆的定义 此为最好 情况 运行时间为 1 如果初始数组是如图 1 5 只有 A 0 1 不满足堆的定义 经过 与子节点的比较调整到图 1 6 但是图 1 6 仍然不满足堆的定义 所以要递归调整 一直到 满足堆的定义或者到堆底为止 如果递归调堆到堆底才结束 那么是最坏情况 运行时间 为 O h h 为需要调整的节点的高度 堆底高度为 0 堆顶高度为 floor logn 建堆完成之后 堆如图 1 7 是个大根堆 将 A 0 8 与 A heapLen 1 交换 然后 heapLen 减一 如图 2 1 然后 AdjustHeap A heapLen 1 0 如图 2 2 如此交换堆的第一个元 素和堆的最后一个元素 然后堆的大小 heapLen 减一 对堆的大小为 heapLen 的堆进行 调堆 如此循环 直到 heapLen 1 时停止 最后得出结果如图 3 1 2 输入 数组 A 堆的长度 hLen 以及需要调整的节点 i 3 功能 调堆 4 5 6 void AdjustHeap int A int hLen int i 7 8 int left LeftChild i 节点 i 的左孩子 9 int right RightChild i 节点 i 的右孩子节点 10 int largest i 11 int temp 12 13 while left hLen right hLen 14 15 if left hLen 18 19 20 if right hLen i 51 52 AdjustHeap A hLen i 53 54 55 56 57 输入 数组 A 待排序数组的大小 aLen 58 功能 堆排序 59 60 void HeapSort int A int aLen 61 62 int hLen aLen 63 int temp 64 65 BuildHeap A hLen 建堆 66 67 while hLen 1 68 69 temp A hLen 1 交换堆的第一个元素和堆的最后一个 元素 70 A hLen 1 A 0 71 A 0 temp 72 hLen 堆的大小减一 73 AdjustHeap A hLen 0 调堆 74 75 性能分析性能分析 调堆 调堆 上面已经分析了 调堆的运行时间为 O h 建堆建堆 每一层最多的节点个数为 n1 ceil n 2 h 1 因此 建堆的运行时间是 O n 循环调堆 代码循环调堆 代码 67 74 因为需要调堆的是堆顶元素 所以运行时间是 O h O floor logn 所以循环调堆的运行时间为 O nlogn 总运行时间 T n O nlogn O n O nlogn 对于堆排序的最好情况与最坏情况的运行 时间 因为最坏与最好的输入都只是影响建堆的运行时间 O 1 或者 O n 而在总体时间中 占重要比例的是循环调堆的过程 即 O nlogn O 1 O nlogn O n O nlogn 因此 最好或者最坏情况下 堆排序的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 让雷锋精神的火炬代代相传-初中八年级主题班会说课稿
- 2025年化学矿项目规划申请报告
- 四川省泸州市2025年-2026年小学六年级数学综合练习(上学期)试卷及答案
- 新疆昌吉回族自治州2025年-2026年小学六年级数学期中考试(上,下学期)试卷及答案
- 2025年中学各学科教师招聘考试模拟题及答案详解
- 2025年体育产业热点话题解析与公务员职业发展路径探讨
- 14繁忙的交通教学设计-2025-2026学年小学美术鲁教版五四制一年级上册-鲁教版(五四制)
- 2025年初入国际贸易行业必-备知识及案例分析模拟题集
- 预防接种人员培训知识课件
- 河南省濮阳市2025年-2026年小学六年级数学阶段练习(上,下学期)试卷及答案
- 2025-2026学年广美版(2024)小学美术二年级上册教学计划及进度表
- 2025年手电筒行业研究报告及未来行业发展趋势预测
- 酒店客户服务质量提升培训课件
- GB/T 9258.2-2025涂附磨具用磨料粒度组成的检测和标记第2部分:粗磨粒P12~P220
- 2025山西太原西山生态文旅投资建设有限公司及子公司招聘13人笔试参考题库附带答案详解
- 2025 年小升初吕梁市初一新生分班考试语文试卷(带答案解析)-(部编版)
- 2025秋全体教师大会上,德育副校长讲话:德为根,安为本,心为灯,家为桥-这场开学讲话,句句都是育人的方向
- 2025年政工师考试试题及参考答案
- (2025年标准)个人转款协议书
- 2025兵团连队职工考试试题及答案解析
- 2025-2026学年接力版(2024)小学英语四年级上册(全册)教学设计(附目录)
评论
0/150
提交评论