收藏 分享(赏)

数据结构与算法设计PPT (47).pdf

上传人:职教中心 文档编号:13704993 上传时间:2022-10-11 格式:PDF 页数:3 大小:10.20MB
下载 相关 举报
数据结构与算法设计PPT (47).pdf_第1页
第1页 / 共3页
数据结构与算法设计PPT (47).pdf_第2页
第2页 / 共3页
数据结构与算法设计PPT (47).pdf_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、第9章排序9.6堆排序2021/2/24 1 锦标赛排序方法对比简单选择排序算法减少了许多排序时间,但是使用了较多的附加存储。 如果有n 个对象,必须使用至少2n-1 个结点来存放胜者树。最多需要找到满足2k-1 n2k 的k,使用2*2k-1 个结点。每个结点包括关键码、对象序号和比较标志三种信息。锦标赛排序算法性能分析堆排序(Heap Sort) 利用堆数据结构,即可以利用树形结构存储比较结果的历史,还可以减少算法的辅助存储空间的数量 堆排序分 个 , 据 数据,利用堆的 算法 n 形 堆 , 的对象 和 堆排序。212525*4916 080123 4 5i 212525* 164908

2、025431i21 25 49 25* 16 08初始关键码集合21 25 49 25* 16 08i= 2 时的局部调整建立初始大根堆过程212525*4916 080123 4 5i492525* 16210802543121 25 49 25* 16 08 49 25 21 25* 16 08i= 0 时的局部调整形成最大堆i= 1 时的局部调整建立初始大根堆过程大根堆的向下调整算法template voidcurrency1 : n const int “ const intnficurrency1 intfl n ;intfl 2* 1;Type ;while fl nficurre

3、ncy1 if fl 1 nficurrency1 & fl ” = heapchild.getKey( ) )break;else heapcurrent = heapchild;current= child;child= 2*child+1;heapcurrent = temp;大根堆的向下调整算法(1)将数组中存储的元素转换成初始大根堆for( inti= ( CurrentSize-2)/2 ; i= 0;i-)FilterDown( i, CurrentSize-1 );(2)利用初始的大根队进行排序堆排序的算法思想 最堆的 个对象 有最的关键码, n对 , 有最关键码的对象 到最

4、对的n-1个对象,使用堆的 算法 n “ n-1 ,最堆。结果 有最关键码的对象 到堆 ,即 。 对 和 n-1, 用 n “ n-2 ,对n-2个对象 ,。 如 ,最 到 排序 的对象序 。利用初始的大根堆排序的思想492525*2116 080123 4 5082525* 16214902543149 25 21 25* 16 08 08 25 21 25* 16 49 0 号 号对象“ 号对象 最堆大根堆排序的过程2021/2/24 112525*082116 490123 4 51625*08 25214902543125 25* 21 08 16 49 16 25* 21 08 25

5、 49 0 号 号对象“ 号对象 号到 号 最堆2021/2/24 1225*16082125 490123 4 5081625* 25214902543125* 16 21 08 25 49 08 16 21 25* 25 49 0 号 号对象“ 号对象 号到 号 最堆2021/2/24 13211625*0825 490123 4 5081625* 25214902543121 16 08 25* 25 49 08 16 21 25* 25 49 0 号 2 号对象“2 号对象 号到2 号 最堆2021/2/24 14160825*2125 490123 4 5081625* 252149

6、02543116 08 21 25* 25 49 08 16 21 25* 25 49 0 号 1 号对象“1 号对象 号到1 号 最堆2021/2/24 15template voidcurrency1 :currency1 /对表heap0到heapn-1进行排序, 使得表中各/个对象按其关键码非递减有序。for int n -2 2; ; - n “ n -1 ; /初始堆for n -1; 1; - “ ; /交换 n “ -1 ; /重建最大堆 堆排序算法的实现堆排序算法性能分析 若设堆中有n 个结点,且2k-1n2k,则对应的完全二叉树有k 层。在第i层上的结点数 2i (i= 0, 1, , k-1)。在第一个形成初始堆的for循环中对每一个非叶结点调用了一次堆调整算法FilterDown( ),因此该循环所用的计算时间为: 其中,i是层序号,2i 是第i层的最大结点数,(k-i-1)是第i层结点能够移动的最大距离。( )-=-2022kiiik ,在第二个for循环中,调用了n-1次FilterDown( )算法,该循环的计算时间为O(nlog2n)。因此,堆排序的时间复杂性为O(nlog2n)。算法的空间复杂性为O(1)。堆排序是一个不稳定的排序方法。njnjjikkjkjjjkkjjkkii/=- -=-=-=-=11111111202222222122 )(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报