- 1、本文档共118页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
(1)花色k0(suit):????;(2)面值k1(facevalue):23…10JQKA。我们的目的是要将扑克牌排成下列次序:?2,…,?A,?2,…,?A,?2,…,?A,?2,…,?A这也就是所谓的字典有序序列。如果将花色和面值看成是扑克牌记录的两个关键字,则扑克牌排序就是一种多关键字排序。有两种方法实现扑克牌排序。一种方法是先按花色分成4叠,然后将这4叠按花色的次序叠在一起;接着再按面值分成13叠,然后将这13叠按面值的次序叠起来。另一种方法是先按面值分成13叠,然后将这13叠按面值的次序叠在一起;接着再按花色分成4叠,然后将这4叠按花色的次序叠起来。一般情况下,我们假定序列中有n个记录(R0,R1,…,Rn-1),每个记录包含d个关键字(k0,k1,…,kd–1),其中k0是最高位关键字,kd–1是最低位关键字。我们称一个序列对关键字(k0,k1,…,kd–1)有序,是指对序列中任意两个元素Ri和Rj(0≤ij≤n-1)都满足字典次序关系:ki0,ki1,…,kid–1≤kj0,kj1,…,kjd-1字典次序(x0,x1,…,xd–1)(y0,y1,…,yd–1)是指必定存在md,使得t=1,2,…,m-1时,xt=yt且xmym。当需要对由多个关键字的记录组成的序列按字典次序排序时,就称此排序为多关键字排序。上面使用的对扑克牌的排序方法,被称为分配排序,这是一种很自然的多关键字排序方法。有两种分配排序的方法:其一是最高位优先法MSD(MostSignificantDigitfirst),其二是最低位优先法LSD(LeastSignificantDigitfirst)。最高位优先法的做法是:排序按关键字k0,k1,…,kd–1次序进行,即先按最高位关键字将序列分成若干叠,然后再按次高位……。最低位优先法的做法是:排序按关键字kd–1,kd–2,…,k0次序进行,即先按最低位关键字将序列分成若干叠,然后再按次低位……在扑克牌的情况下,先按花色分配,再按面值分配的做法是最高位优先法;反之是最低位优先法。最高位优先法和最低位优先法的思想可以用于对单关键字记录的序列进行排序。基数排序就是一种最低位优先法的单关键字排序方法,这里的“位”是单关键字中的一个分量。如果一个记录的单关键字ki可以分解为d个分量ki0,ki1,…,kid–1,其中,最高位分量是ki0,最低位分量是kid–1,每个分量有radix种取值,radix称为基数(比如整数614可按基数radix=10分解成d=3个分量),这样,我们就可以将一个关键字看成是由多个成分关键字组成的组合关键字,从而可以采用上述分配排序的思想进行排序。图11-18给出了对d=3,radix=10的10个记录的序列进行基数排序时的各趟排序过程。假定记录序列用链表存储。初始序列:L(r)080(r)362(r)012(r)543(r)054(r)745(r)885(r)565(r)786(r)957。首先,将表中记录按个位数分配到编号从0到9的10个子链表中。[0]080[5]745(r)885(r)565[1][6]786[2]362(r)012[7]957[3]543[8][4]054[9]然后,将上面10个链表收集起来,成为一个链表(所谓收集,就是将10个链表依次链接起来):L080362012543054745885565786957再次将表中记录按十位数分配到编号从0到9的10个子链表中。[0][5]054957[1]012[6]362565[2][7][3][8
文档评论(0)