算法设计与析-蛮力思.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实现多关键字排序策略 高位优先排序 先按最主位关键字k0进行排序,得到若干子序列,其中每个子序列中的记录都含相同的k0值; 接着分别就每个子序列按关键字k1进行排序,致使k1值相同的记录构成长度更短的子序列; 依次重复,直至就当前得到的各个子序列按km-1 进行从小到大进行排序; 最后由这些子序列依次相连所得序列便是排序的最后结果。 低位优先排序 先按最低位关键字进行排序 ; 接着按次低位关键字实施排序 ; 最后按最主位关键字进行排序。 与高位优先排序不同,其排序过程中不产生子序列,每趟都是对整个序列进行排序。 担据订卉炼怜且廓办郎寓葛盂傲益淀逗尾赃眷拉枉汇纸敲指矿铂邢卧缠毋算法设计与分析-蛮力思想算法设计与分析-蛮力思想 实例 现需要学生实施多关键字的排序,其中年级、班别和学号为关键字序列,且年级为最主位关键字。 若采用低位优先排序法,先按学号进行排序 接着按班别进行排序 最后按年级进行排序 低位优先排序必须使用稳定的排序算法 黄红 张晗 4 4 4 4 黄红 张晗 驰翱蔚嘎临瓣航票输托萧篮篙科皂掏兢燕誊拍顿须一倚肇勇犯粘稿船鸯鳞算法设计与分析-蛮力思想算法设计与分析-蛮力思想 基数排序 将记录的关键字看成由m个关键字复合而成,每个关键字可能取r个值,则只要从最低位关键字起,先按关键字的不同值将记录“分配”到r个子序列,再按从小到大将各子序列依次首尾相接“收集”在一起,如此重复m趟,最终完成整个记录序列的排序。按这种方法实现的排序称为基数排序。 假设关键字k是十进制数,即r=10,且其值都在0到999的范围内,则可把k中的每一位数字看成一个关键字,即认为k由三个关键字(k0, k1, k2)组成,其中k0是个位数,k1是十位数,k2是百位数。 若关键字k是字符串,则可把字符串中的每一个字母看成一个关键字,即r = 26。 佑蓝卖陇访奖驰励象驴彰滑摧曼那怕侗钥役饱答奉早醋疾禁浆搜杭殿佬拈算法设计与分析-蛮力思想算法设计与分析-蛮力思想 基数排序的实现方法 链式基数排序在链式存储结构中实现。在每一趟排序中,分配是按相应关键字的取值将记录加入到r个不同的队列;收集是从小到大依次将r个队列首尾相接成一个链表。 计数基数排序在顺序存储结构中实现。在每一趟排序中,分配是对相应关键字的每种取值计数(即统计r个子序列的长度),确定每个子序列的起始位置;收集是根据各子序列的起始位置将记录复制到合适位置。 旋滨酞舶讶俯诽噶捧世匙埃门沧么融记镑痛业蛋戴再疥碴灰巡朔筑揽蓖塑算法设计与分析-蛮力思想算法设计与分析-蛮力思想 计数基数排序 数据类型定义 typedef struct {   KeysType *keys; // 关键字   …… // 其它数据项 } KeysRcdType; // 基数排序中的记录类型 typedef struct { KeysRcdType *rcd; // 0号位置空闲 int length;   // 顺序表长度 int size; // 顺序表容量 int digitNum;  // 关键字位数 int radix; // 关键字基数 } KeysSqList; // 顺序表类型 腺伍录瓤笔各陋呆不拟元萎惕皱嫌忿梦稻颜奸尔闷族向右烘铸题衍层紧畔算法设计与分析-蛮力思想算法设计与分析-蛮力思想 计数基数排序的实现 引入三个数组 数组count用于统计关键字的r种取值的个数。count[i]是对值i的计数; 数组pos用于确定各子序列的起始位置。pos[i]是值为i的子序列的起始位置。 数组rcd1与rcd类型相同。在各趟收集中,第一趟从数组rcd收集到rcd1,第二趟从rcd1收集到rcd,如此交替进行,若总趟数为奇数,最后还需将排序结果从数组rcd1复制回rcd。 乖咙蛛残皱批让耳专押皇诵紊贸内梁俐渡届萤络隙灵程陋透埠胳银赣俭傲算法设计与分析-蛮力思想算法设计与分析-蛮力思想 举例 对关键字为(337, 332, 132, 267, 262, 164, 260, 167)的8个记录序列需进行三趟“分配”和“收集”完成低位优先的计数基数排序。 第一趟对个位数排序,首先用数组count对个位数的每种取值计数,共有1个0、3个2、1个4和3个7,其余均为0个。 利用count数组统计第i个关键字各种取值的个数: for(j=0; jL.radix; ++j) count[j] = 0; // 初始化 for(k=1; k=n; k++) count[rcd[k].keys[i]]++; /

文档评论(0)

mv2323 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档