基数排序ppt.ppt

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

8.6 基数排序 8.6.1 基数排序的基本思想 基数排序是一种基于多关键字的排序方法。 1. 多关键字排序 【举例】 将表8-1所示的学生成绩单按数学成绩的等级由高到低排序,数学成绩相同的学生再按英语成绩的高低等级排序。 排序结果如表8-2所示。 与前面几节所讲述的排序不同,在这个排序中,每个学生记录最终的位置由两个关键字决定。第1关键字为数学成绩k1,第二个关键字为英语成绩k2,则排序后每一个学生成绩记录的位置由关键字k1 k2决定,我们将它称之为复合关键字,即多关键字排序是按照复合关键字的大小排序。 现在我们讨论一下多关键字排序的方法。下面我们以学生成绩单为例,给出通常采用的两种方法。第一种方法是先按数学等级由高到低将学生记录分成A、B、C、D、E五个子序列,然后再分别对每个子序列按英语成绩由高到低排序,这样就会得到一个优先按数学等级排序,在数学等级相同的情况下,再按英语等级排序;第二种方法是先将学生记录按英语等级由高到低分成A、B、C、D、E 五个组: 表 8-3 然后按从左向右,从上向下的顺序将它们收集起来得到关键字序列: AA,EA,AB,BB,CB,DB,BC,CD 再按数学成绩由高到低分成A、B、C、D、E五个组: 表 8-4 再按由高到低的顺序将它们收集起来,得到关键字序列: AA,AB,BB,BC,CB,CD,DB,EA 可以看出,这个关键字序列已经是有序的了。 在上述两种基于多关键字的排序方法中,第一种方法是先按高位关键字进行排序,被称之为“最高位优先”法,简称MSD法;第二种方法是先按低位关键字排序,被称之为“最低位优先”法,简称为LSD。从上面的例子可以看出:在MSD法中,先按高位关键字将待排序数据分成子序列,然后再对各子序列按下一个关键字排序;而使用LSD法进行排序时,对每个关键字都是将整个序列按关键字分组,然后按顺序收集,显然LSD法,操作比较简单。 2. 基数排序 基数排序是借助于多关键字排序思想进行排序的一种排序方法。该方法将排序关键字K看作是由多个关键字组成的组合关键字,即K=k1k2…kd。每个关键字ki表示关键字的一位,其中k1为最高位,kd为最低位,d为关键字的位数。例如,对于关键字序列(101,203 567,231,478,352),可以将每个关键K看成由三个单关键字组成,即K= k1k2k3,每个关键字的取值范围为0≤ki≤9,所以每个关键字可取值的数目为10,通常将关键字取值的数目称为基数,用符号r表示,在这个例子中r=10。对于关键字序列(AB,BD,ED)可以将每个关键字看成是由二个单字母关键字组成的复合关键字,并且每个关键字的取值范围为“A~Z”,所以关键字的基数r=26。 我们在这里讲述的基数排序是指用多关键字的LSD方法排序,即对待排序的记录序列按照复合关键字从低位到高位的顺序交替地进行“分组”、“收集”,最终得到有序的记录序列。在此我们将一次“分组”、“收集”称为一趟。对于由 d位关键字组成的复合关键字,需要经过d趟的“分配”与“收集”。 在基数排序的“分配”与“收集”操作过程中,为了避免数据元素的大量移动,通常采用链式存储结构存储待排序的记录序列,若假设记录的关键字为int类型,则链表的结点类型可以定义如下: typedef struct node { int key; anytype data; int *next; }List_Node; 8.6.3 链式基数排序算法 基数排序的基本操作是按关键字位进行“分配”和“收集”。 初始化操作 在基数排序中,假设待排序的 记录序列是以单链表的形式给出,10个队列的存储结构也是单链表形式,其好处是:在进行“分配”操作时,按要求将每个结点插入到相应的队列中,在进行“收集”操作时,将非空的队列依次首尾相连,这样做即节省存储空间又操作方便。所以初始化操作主要是将10个队列置空: for(j=0;jr;j++){f[j]=NULL;t[j]=NULL;} “分配”操作 “分配”过程可以描述为:逐个从单

文档评论(0)

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

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

版权声明书
用户编号:7065136142000003

1亿VIP精品文档

相关文档