数据结构第07章_内部排序.ppt

  1. 1、本文档共115页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构第07章_内部排序

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 2.链式基数排序 基数排序是典型的LSD排序方法,利用“分配”和“收集”两种运算对单关键字进行排序。在这种方法中,把单关键字 Ki 看成是一个d元组: 其中的每一个分量 ( 1 ≤ j ≤ d ) 也可看成是一个关键字。 分量 (1 ≤ j ≤ d ) 有radix种取值,则称radix为基数。例:关键字 984 可看成是一个3元组(9,8,4),每一位有 0…9 十种取值,基数 radix = 10。关键字 ‘data’ 可以看成是一个 4 元组(d,a,t,a),每一位有 ‘a’ … ‘z’ 26种取值,radix = 26。 针对 d 元组中的每一位分量,把对象序列中的所有对象,按 的取值,先“分配”到rd个队列中去。然后再按各队列的顺序,依次把对象从队列中“收集”起来,这样所有对象按取值 排序完成。 如果对于所有对象的关键字K1, K1, …, Kn,依次对各位的分量,让 j = d, d-1, …, 1,分别用这种“分配”、“收集”的运算逐趟进行排序,最后一趟“分配”、“收集” 完成后,所有对象就按其关键字的值从小到大排好序了。 各队列采用链式队列结构,分配到同一队列的关键字用链接指针链接起来。每一队列设置两个队列指针: int front [radix]指示队头 int rear [radix] 指向队尾 为了有效地存储和重排 n 个待排序对象,以静态链表作为它们的存储结构。在对象重排时不必移动对象,只需修改各对象的链接指针即可。 第一趟分配(按最低位 i = 3 ) re[0] re[1] re[2] re[3] re[4] re[5] re[6] re[7] re[8] re[9] fr[0] fr[1] fr[2] fr[3] fr[4] fr[5] fr[6] fr[7] fr[8] fr[9] 基数排序的“分配”与“收集”过程 第一趟 614 921 485 637 738 101 215 530 790 306 614 738 637 921 101 485 215 530 790 306 第一趟收集 530 790 921 101 614 485 215 306 637 738 第二趟分配(按次低位 i = 2 ) re[0] re[1] re[2] re[3] re[4] re[5] re[6] re[7] re[8] re[9] fr[0] fr[1] fr[2] fr[3] fr[4] fr[5] fr[6] fr[7] fr[8] fr[9] 基数排序的“分配”与“收集”过程 第二趟 614 921 485 637 738 101 215 530 790 306 485 614 215 921 738 637 530 790 101 306 第二趟收集 530 790 921 101 614 485 215 306 637 738 第三趟分配(按最高位 i = 1 ) re[0] re[1] re[2] re[3] re[4] re[5] re[6] re[7] re[8] re[9] fr[0] fr[1] fr[2] fr[3] fr[4] fr[5] fr[6] fr[7] fr[8] fr[9] 基数排序的“分配”与“收集”过程 第三趟 614 921 485 637 738 101 215 530 790 306 921 485 614 637 101 215 530 738 790 306 第三趟收集 530 790 921 101 614 485 215 306 637 738 3.算法分析 若每个关键字有 d 位,需要重复执行 d 趟“分配”与“收集”。每趟对 n 个对象进行“分配”,对radix 个队列进行“收集”。总时间复杂度为O(d(n+radix))。 若基数 radix 相同,对于对象个数较多而关键

文档评论(0)

quechui388620 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档