第八章排序祥解.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文档。上传文档
查看更多
第八章排序祥解.ppt

第八章 排序 排序的分类 按待排序记录所在位置 内部排序:待排序记录存放在内存 外部排序:排序过程中需对外存进行访问的排序 按排序依据原则 插入排序:直接插入排序、折半插入排序、希尔排序 交换排序:冒泡排序、快速排序 选择排序:简单选择排序、堆排序 归并排序:2-路归并排序 排序的基本操作 比较两个关键字大小 将记录从一个位置移动到另一个位置 插入排序 插入排序——直接插入排序 插入排序——希尔排序 交换排序——冒泡排序 交换排序——快速排序 选择排序——简单选择排序 n个元素的序列(k1,k2,……kn),当且仅当满足下列关系时,称之为堆 堆排序的关键问题 堆排序需解决的两个问题: 如何由一个无序序列建成一个堆? 如何在输出堆顶元素之后,调整剩余元素,使之成为一个新的堆? 堆排序的关键问题 第二个问题解决方法——筛选 方法:输出堆顶元素之后,以堆中最后一个元素替代之;然后将根结点值与左、右子树的根结点值进行比较,并与其中小者进行交换;重复上述操作,直至叶子结点,将得到新的堆,称这个从堆顶至叶子的调整过程为“筛选”。 第一个问题解决方法——建堆 方法:从无序序列的第?n/2?个元素(即此无序序列对应的完全二叉树的最后一个非终端结点)起,至第一个元素止,进行反复筛选。 2-路归并排序的关键问题 合并是归并排序的核心,即将两个首尾相连的有序子表合并成一个有序子表。在合并的基础上进行一趟排序,在一趟排序的基础上完成多趟排序。 多关键字的排序 假设有n个记录的序列 { R1, R2, …,Rn} 每个记录Ri中含有d个关键字(Ki0, Ki1, …,Kid-1),则称上述记录序列对关键字(Ki0, Ki1, …,Kid-1)有序是指:对于序列中任意两个记录Ri和Rj(1≤ij≤n)都满足下列(词典)有序关系: (Ki0, Ki1, …,Kid-1) (Kj0, Kj1, …,Kjd-1) 其中K0被称为“最主”位关键字,Kd-1被称为 “最次”位关键字。 实现多关键字排序通常有两种作法: 最高位优先MSD法:先对K0进行排序,并按K0的不同值将记录序列分成若干子序列之后,分别对K1进行排序,…,依次类推,直至最后对最次位关键字排序完成为止。 最低位优先LSD法:先对Kd-1进行排序,然后对Kd-2进行排序,依次类推,直至对最主位关键字K0排序完成为止。排序过程中不需要根据“前一个”关键字的排序结果,将记录序列分割成若干个(“前一个”关键字不同的)子序列。 例如:学生记录含三个关键字:系别、班号和班内的序列号,其中以系别为最主位关键字。LSD的排序过程如下: 无序序列3,2,30 1,2,15 3,1,20 2,3,18 2,1,20 对K2排序1,2,15 2,3,18 3,1,20 2,1,20 3,2,30 对K1排序3,1,20 2,1,20 1,2,15 3,2,30 2,3,18 对K0排序1,2,15 2,1,20 2,3,18 3,1,20 3,2,30 链式基数排序 假如多关键字的记录序列中,每个关键字的取值范围相同,则按LSD法进行排序时,可以采用“分配-收集”的方法,其好处是不需要进行关键字间的比较。 对于数字型或字符型的单关键字,可以看成是由多个数位或多个字符构成的多关键字,此时可以采用这种“分配-收集”的办法进行排序,称作基数排序法。 链式基数排序 在计算机上实现基数排序时,应采用链表作存储结构,即链式基数排序,具体作法为: 待排序记录以指针相链,构成一个链表; “分配”时,按当前“关键字位”所取值,将记录分配到不同的“链队列”中,每个队列中记录的“关键字位”相同; “收集”时,按当前关键字位取值从小到大将各队列首尾相链成一个链表; 对每个关键字位均重复2)和3)两步。 链式基数排序 例如: p→369→367→167→239→237→138→230→139 第一次分配得到 f[0]→230←r[0] f[7]→367→167→237←r[7] f[8]→138←r[8] f[9]→369→239→139←r[9] 第一次收集得到 p→230→367→167→237→138→368→239→139 第二次分配得到 f[3]→230→237→138→239→139←r[3] f[6]→367→167→368←r[6] 第二次收集得到 p→230→237→138→239→139→367→167→368 第三次分配得到 f[1]→138→139→167←r[1] f[2]→230→237→239←r[2] f[3]→367→368←r[3] 第三次收集之后便得到记录的有序序列 p→138→139→167→230→237→239→367→368 外部排序的基本方法

文档评论(0)

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

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

1亿VIP精品文档

相关文档