版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、堆与堆排序,软件学院 王建文, 一、堆和堆排序的概念 二、堆的调整 三、建堆 四、堆排序,7.5.2 堆和堆排序,堆的定义: 若n个元素的序列a1 a2 an 满足 ai a2i 或 ai a2i ai a2i+1 ai a2i+1 则分别称该序列a1 a2 an为小根堆 和大根堆。 从堆的定义可以看出,堆实质是满足如下性质的完全二叉树: 二叉树中任一非叶子结点均小于(大于)它的孩子结点,例: 下面序列为堆,对应的完全二叉树分别为:,77 35 62 55 14 35 48 14 48 35 62 55 98 35 77,堆的应用-优先级队列,服务排队-见课本200, 例5.1 堆排序,堆排序
2、 若在输出堆顶的最小值(最大值)后,使得剩余n-1个元素的序列重又建成一个堆,则得到n个元素的次小值(次大值)如此反复,便能得到一个有序序列,这个过程称之为堆排序。,实现堆排序需解决两个问题: 1、如何由一个无序序列建成一个堆? 2、如何在输出堆顶元素后,调整剩余元素为一个新的堆? 下面先讨论第二个问题:,一、堆和堆排序的概念 二、堆的调整 三、建堆 四、堆排序,7.5.2 堆和堆排序,如何在输出堆顶元素后,调整剩余元素为一个新的堆? 解决方法: 输出堆顶元素之后,以堆中最后一个元素替代之;然后将根结点值与左、右子树的根结点值进行比较,并与其中小者进行交换;重复上述操作,直至叶子结点,将得到新
3、的堆,称这个从堆顶至叶子的调整过程为“筛选”,13,38,27,49,76,65,49,97,13,输出根并以最后一个元素代替之; 比较其左右孩子值的大小,并与其中较小者交换;,97,27,97,49,97,小根堆,堆调整与数组变化的关系,加入元素时向上调整 删除元素时向下调整,加入元素,Fig. 27-2 The steps in adding 85 to the maxheap of Figure 27-1a,Adding an Entry,Begin at next available position for a leaf Follow path from this leaf towa
4、rd root until find correct position for new entry As this is done Move entries from parent to child Makes room for new entry,Adding an Entry,Fig. 27-3 A revision of steps shown in Fig. 27-2 to avoid swaps.,Adding an Entry,Fig. 27-4 An array representation of the steps in Fig. 27-3 continued ,Adding
5、an Entry,Fig. 27-4 (ctd.) An array representation of the steps in Fig. 27-3.,Adding an Entry-代码见课本203,Algorithm for adding new entry to a heap,Algorithm add(newEntry)if (the array heap is full)Double the size of the arraynewIndex = index of next available array locationparentIndex = newIndex/2 / ind
6、ex of parent of available locationwhile (newEntry heapparentIndex)heapnewIndex = heapparentIndex / move parent to available location/ update indicesnewIndex = parentIndexparentIndex = newIndex/2 / end while,删除元素,Fig. 27-5 The steps to remove the entry in the root of the maxheap of Fig. 27-3d,Removin
7、g the Root,Fig. 27-6 The steps that transform a semiheap into a heap without swaps.,你能画出删除堆顶元素时相应数组的变化吗? 删除元素代码见课本204,一、堆和堆排序的概念 二、堆的调整 三、建堆 四、堆排序,7.5.2 堆和堆排序,第一种方法:,把一个数组看成两部分,左边是堆,右边是还没加入堆的元素,步骤如下: 1、数组里的第一个元素自然地是一个堆 2、然后从第二个元素开始,一个个地加入左边的堆,当然,每加入一个元素就破坏了左边元素堆的性质,得重新把它调整为堆,创建堆,时间复杂度,该方法创建堆的时间复杂度为O
8、 (n log n),可以看出: 对一个无序序列反复“筛选”就可以得到一个堆 即:从一个无序序列建堆的过程就是一个反复“筛选”的过程。 那么:怎样判断一个序列是一个堆?或者说,建堆操作从哪儿着手?,第二种方法:自底向上创建堆,显然: 单结点的二叉树是堆;在完全二叉树中所有以叶子结点(序号i n/2)为根的子树是堆。 这样,我们只需依次将以序号为n/2,n/21,, 1的结点为根的子树均调整为堆即可。 即:对应由n个元素组成的无序序列,“筛选”只需从第n/2个元素开始。,由于堆实质上是一个完全二叉树,那么我们可以顺序存储一个堆。 下面以一个实例介绍建一个小根堆的过程。 例:有关键字为49,38,
9、65,97,76,13,27,49的一组记录,将其按关键字调整为一个小根堆。,49,38,65,97,76,13,27,49,首先, 调整从第n/2个元素开始 将以该元素为根的二叉树调整为堆 然后,将以序号为n/21的结点为根的二叉树调整为堆; 再将以序号为n/22的结点为根的二叉树调整为堆; 再将以序号为n/23的结点为根的二叉树调整为堆;,49,65,97,76,13,49,38,27,97,49,97,49,65,13,65,13,49,49,13,13,27,49,27,49,Heapsort,Fig. 27-9 A trace of heapsort (a c),Heapsort,F
10、ig. 27-9 A trace of heapsort (d f),Heapsort,Fig. 27-9 A trace of heapsort (g i),Heapsort,Fig. 27-9 A trace of heapsort (j l),堆排序算法实现,课本290页,Analysis,We visualize the worst-case time of a downheap with a proxy path that goes first right and then repeatedly goes left until the bottom of the heap (this
11、 path may differ from the actual downheap path) Since each node is traversed by at most two proxy paths, the total number of nodes of the proxy paths is O(n) Thus, bottom-up heap construction runs in O(n) time Bottom-up heap construction is faster than n successive insertions and speeds up the first phase of heap-sort,时间复杂度分析,该方法创建堆的时间复杂度为O(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数学教育的道德价值与社会责任
- 二零二五年度新能源船舶动力系统研发与股权置换协议3篇
- 个人赎楼融资担保合同(2024年修订)3篇
- 创新思维的推广与普及在科技发展中的作用
- 2025版学校医务室紧急救援预案与协同合作合同
- 二零二五年度高科技企业孵化器场地出租协议示范文本2篇
- 融合媒体的商业模式变革与创新思维
- 2025版智慧消防及通风系统施工与运营合同3篇
- 二零二五年度特色餐饮品牌特许经营合作协议2篇
- 二零二五年度海外农产品销售代理及供应链管理合同2篇
- 2024版《建设工程开工、停工、复工安全管理台账表格(流程图、申请表、报审表、考核表、通知单等)》模版
- 2024年广州市高三一模普通高中毕业班高三综合测试一 物理试卷(含答案)
- 部编版《道德与法治》六年级下册教材分析万永霞
- 粘液腺肺癌病理报告
- 酒店人防管理制度
- 油田酸化工艺技术
- 上海高考英语词汇手册列表
- 移动商务内容运营(吴洪贵)任务五 其他内容类型的生产
- 上海石油化工股份有限公司6181乙二醇装置爆炸事故调查报告
- 例说相机诱导在语文教学中的运用 相机诱导
- 浙江省绍兴市2023年中考科学试题(word版-含答案)
评论
0/150
提交评论