第7章排序(上课用)讲述.ppt

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

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 107-* 最高位优先法通常是一个递归的过程: 先根据最高位关键字 K1排序, 得到若干元素组, 元素组中各元素都有相同关键字K1。 再分别对每组中元素根据关键字 K2 进行排序, 按 K2 值的不同, 再分成若干个更小的子组, 每个子组中的元素具有相同的 K1和 K2值。 依此重复, 直到对关键字Kd完成排序为止。 最后, 把所有子组中的元素依次连接起来,就得到一个有序的元素序列。 107-* 最低位优先法 首先依据最低位关键字Kd对所有元素进行一趟排序,再依据次低位关键字Kd-1对上一趟排序的结果再排序,依次重复,直到依据关键字K1最后一趟排序完成,就可以得到一个有序的序列。 这种排序方法对每个关键字进行排序时,不需要再分组,而是整个元素组都参加排序。 LSD和MSD方法也可把单个关键字 Ki 看作是一个子关键字组: 进行排序。 107-* 链式基数排序 基数排序是典型的LSD排序方法, 利用“分配”和“收集”对单关键字进行排序。在这种方法中,把单关键字 Ki 看成是一个 d 元组: 其中的每一个分量 (1≤j≤d) 也可看成是一个关键字。 分量 有 radix 种取值, 称 radix 为基数。例如,关键字984可以看成是一个3元组(9, 8, 4), 每一位有 0, 1, …, 9 等10种取值,基数radix = 10。关键字‘data’可以看成是一个4元组(d,a,t,a), 每一位有‘a’,‘b’, …, ‘z’等26种取值,radix = 26。 107-* 针对d元组中的每一位分量, 把元素序列中的所有元素, 按 的取值,先“分配”到rd个队列中去。然后再按各队列的顺序,依次把元素从队列中“收集”起来,这样所有元素按取值 排序完成。 如果对于所有元素的关键字K0, K1, …, Kn-1, 依次对各位的分量, 让 j=d, d-1, …, 1, 分别用“分配”、“收集”的运算逐趟进行排序,在最后一趟“分配”、“收集” 完成后, 所有元素就按其关键字的值从小到大排好序了。 各队列采用链式队列结构, 分配到同一队列的关键字用链接指针链接起来。 107-* 每一队列设置两 个队列指针: int front [radix]指示队头 int rear [radix] 指向队尾 为了有效地存储和重排 n 个待排序元素,以静态链表作为它们的存储结构。 107-* 基数排序的“分配”与“收集”过程 第一趟 614 921 485 637 738 101 215 530 790 306 第一趟分配(按最低位 i = 3 ) re[0] re[1] re[2] re[3] re[4] re[5] re[6] re[7] re[8] re[9] 614 738 921 485 637 101 215 530 790 306 fr[0] fr[1] fr[2] fr[3] fr[4] fr[5] fr[6] fr[7] fr[8] fr[9] 第一趟收集 530 790 921 101 614 485 215 306 637 738 107-* 基数排序的“分配”与“收集”过程 第二趟 614 921 485 637 738 101 215 530 790 306 第二趟分配(按次低位 i = 2 ) re[0] re[1] re[2] re[3] re[4] re[5] re[6] re[7] re[8] re[9] 614 738 921 485 637 101 215 530 790 306 fr[0] fr[1] fr[2] fr[3] fr[4] fr[5] fr[6] fr[7] fr[8] fr[9] 第二趟收集 530 790 921 101 614 485 215 306 637 738 107-* 基数排序的“分配”与“收集”过程 第三趟 614 921 485 637 738 101 215 530 790 306 第三趟分配(按最高位 i = 1 ) re[0] re[1] re[2] re[3] re[4] re[5] re[6] re[7] re[8] re[9] 614 738 921 485 637 101 215 530 790 306 fr[0] fr[

文档评论(0)

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

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

1亿VIP精品文档

相关文档