- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
140-* 若每个排序码有d位, 需要重复执行d趟“分配”与“收集”。每趟对n个元素进行“分配”,对radix个队列进行“收集”。总时间复杂度为 O(d(n+radix)) 若基数radix相同, 对于元素个数较多而排序码位数较少的情况, 使用链式基数排序较好。 基数排序需要增加n+2radix个附加链接指针。 基数排序是稳定的排序方法。 140-* 各种排序方法的比较 140-* 算法分析 设堆中有 n 个结点, 且 2k-1 ≤ n 2k, 则对应的完全二叉树有 k 层。在第 i 层上的结点数≤2i-1 (i = 1, …, k)。在第一个形成初始堆的 for 循环中对每一个非叶结点调用了一次堆调整算法siftDown(), 该循环所用的计算时间为: 其中, i 是层次编号, 2i-1 是第 i 层的最大结点数, (k-i)是第 i 层结点能够移动的最大距离。 140-* 第二个 for 循环中调用了n-1次siftDown()算法, 该循环的计算时间为O(nlog2n)。因此, 堆排序的时间复杂性为O(nlog2n)。 该算法的附加存储主要是在第二个 for 循环中用来执行元素交换时所用的一个临时元素。因此,该算法的空间复杂性为O(1)。 堆排序是一个不稳定的排序方法。 140-* 归并排序 (Merge Sort) 归并,是将两个或两个以上的有序表合并成一个新的有序表。 元素序列L1中有两个有序表Vector[left..mid]和Vector[mid+1..right]。它们可归并成一个有序表, 存于另一元素序列L2的Vector[left..right] 中。 这种方法称为两路归并 (2-way merging)。 变量 i 和 j 分别是表Vector[left..mid]和Vector [mid+1..right]的检测指针。k 是存放指针。 140-* 08 21 25 25* 49 62 72 93 16 37 54 left mid mid+1 right initList i j 08 16 21 25 25* 37 49 54 62 72 93 left right k mergeList 当 i 和 j 都在两个表的表长内变化时, 根据对应项的排序码的大小, 依次把排序码小的元素排放到新表 k 所指位置中; 当 i 与 j 中有一个已经超出表长时,将另一 个表中的剩余部分照抄到新表中。 140-* 迭代的归并排序算法 迭代的归并排序算法就是利用两路归并过程进行排序。其基本思想是: 设初始元素序列有 n 个元素,首先把它看成是 n 个长度为 1 的有序子序列(归并项),做两两归并,得到 ?n/2? 个长度为 2 的归并项(最后一个归并项的长度为1);再做两两归并,得到 ?n/4? 个长度为 4 的归并项(最后一个归并项长度可以短些)…,如此重复,最后得到一个长度为 n 的有序序列。 140-* 迭代的归并排序算法 21 25 25* 25* 93 62 72 08 37 16 54 49 21 25 49 62 93 08 72 16 37 54 21 25 25* 49 08 62 72 93 16 37 54 08 08 21 16 25 21 25* 25 49 25* 62 37 72 49 93 54 16 37 54 62 72 93 len=1 len=2 len=4 len=8 len=16 140-* 两路归并算法 #include dataList.h template class T void merge (dataListT L1, dataListT L2, const int left, const int mid, const int right) { //L1.Vector[left..mid]与L1.Vector[mid+1..right]是两 //个有序表, 将这两个有序表归并成一个有序表 //L2.Vector[left..right] int k, i, j; i = left; j = mid+1; k = left; //s1, s2是检测指针, t是存放指针 140-* while (i = mid j = right) //两两比较
您可能关注的文档
最近下载
- 初中英语AI辅助阅读理解能力提升策略研究教学研究课题报告.docx
- 人教版部编版统编版六年级上册语文期中复习课件.pptx VIP
- 链家大区商圈经理述职.pptx VIP
- 2025年天津市农机拆解产业园区规划建设可行性研究报告.docx
- 《反对本本主义》课件.ppt VIP
- 北师大三年级下册第七单元《小小鞋店》教学设计含教学反思 .pdf VIP
- 卫生政策学 期末复习小抄.docx VIP
- 房地产成品住房装修技术标准.pdf VIP
- 电力系统北斗短报文业务消息报文传输流程、消息报文编码示例.pdf VIP
- 考研题库 《认知心理学》(第7版)(真题 课后习题 章节题库 模拟试题).docx VIP
原创力文档


文档评论(0)