《可视化计算》第5章排序与查找A.ppt

上传人:本田雅阁 文档编号:2968815 上传时间:2019-06-15 格式:PPT 页数:46 大小:7.95MB
返回 下载 相关 举报
《可视化计算》第5章排序与查找A.ppt_第1页
第1页 / 共46页
《可视化计算》第5章排序与查找A.ppt_第2页
第2页 / 共46页
《可视化计算》第5章排序与查找A.ppt_第3页
第3页 / 共46页
《可视化计算》第5章排序与查找A.ppt_第4页
第4页 / 共46页
《可视化计算》第5章排序与查找A.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《《可视化计算》第5章排序与查找A.ppt》由会员分享,可在线阅读,更多相关《《可视化计算》第5章排序与查找A.ppt(46页珍藏版)》请在三一文库上搜索。

1、第5章 排序与查找 PART A,可视化计算,学习目标,如何在计算机中进行排序? 排序算法有那些分类? 如何实现常用的排序算法? 查找与排序有何关系? 查找算法有哪些分类? 如何实现常用的查找算法?,2,http:/,何为排序?,学习中的排序: 在一些教课书中,会将涉及到的所有术语排成索引,作为附录,方便读者在需要时查找 图书馆工作人员的重要工作,就是把归还的书,插入适当的书架、层次、位置, 方便读者查阅 社会中排序: 会议代表名单的排序(按姓氏笔画); 联大会议的发言顺序(按国家名称字母排序),3,http:/,计算机如何进行排序?,从”混沌”到有序:排序自身也是一种应用,同时也为快速的查找

2、提供必要的准备 在计算机科学中,排序(sorting)是研究最多的问题之一 基本排序算法有5类: 插入排序,例如,直接插入排序,二分插入排序等; 交换排序,例如,冒泡排序,快速排序等; 选择排序,例如,选择排序,推排序等 归并排序,例如,归并排序,多相归并排序等 分布排序,例如,桶排序,基数排序等,4,http:/,排序术语和实现策略,自然的(natural) 如果某种排序算法对有序的数据排序速度较快(工作量变小),对无序的数据排序速度却较慢(工作变量大),这种算法被称为自然排序算法 如果数据已接近有序,就需要考虑选用自然的排序算法,5,http:/,排序术语和实现策略,稳定的(stable)

3、 如果能保持它认为相等的数据的前后顺序,这种算法被称为稳定排序算法 稳定的排序算法可按主、次关键字对数据进行排序,例如,按照姓氏和名字排序。 在具体实现时,就是先按主关键字排序,再按次关键字排序,6,http:/,排序术语和实现策略,内部排序和外部排序 待排数据全部在内存中的排序方法被称为内部排序,待排数据在磁盘、磁带和其它外存中的排序方法被称为外部排序 本节涉及的排序算法,全部针对内部排序进行讨论,7,http:/,排序术语和实现策略,关键字排序(Key sort) 如果要对某班级学生的期末成绩表进行排序,表中给出了每个学生的学号、姓名、单科成绩和总成绩等项目 按什么来排序?所选结果,就是关

4、键字 本章所有案例中,只考虑关键字字段,而先将信息的其他内容一概略去,8,http:/,排序术语和实现策略,数字化排序(digitized sort) 在排序过程中,可以按数值大小排序,有时候需要按字符来排序,有时候需要按照时间的迟早来排序 实际上,计算机内的所有数据,无论属于哪种类型数据,都可以转换成数字(二进制或十进制)表达 所以排序本身可以抽象为对数字进行排序,9,http:/,如何在RAPTOR中实现排序,排序算法测试的数据来源 请回顾第2章提及的随机数生成和存储,以及使用文件输入数据的方法 不仅可以节省用户与算法的交互时间 而且可以适当扩大数据集合,验证算法的效率,10,http:/

5、,直接插入排序,直接插入排序与整理扑克牌的过程非常类似 第1张牌没有必要整理 以后每次从牌堆(无序区)的最上面摸出1张牌并插入左手牌(有序区)中正确的位置上 为了确定正确的插入位置,一般从左向右将摸上来的牌与手中已有的牌逐一比较,11,http:/,直接插入排序,假设data.txt文件中存放着待排序的记录R ,则R可以看成是一个长度为n的待排数组 首先从data.txt文件中保存的数组R读入一个数据到a1,生成一个有序数组 由于文件中的数组R呈无序状态,从i=2起至i=n为止,依次将Ri插入当前的有序数组a1i-1中 最后生成含n个记录的有序数组,12,http:/,插入排序main子图,1

6、3,http:/,插排look_for_position子图,14,http:/,插排move_to_new_position子图,15,http:/,桶排序,桶排序的思想源于信件分拣 在现实应用中,是把0,1)的数值划分为n个大小相同的子区间,每一子区间可以看作是一个桶 然后将n个记录分配到各个桶内 由于同一桶内的记录其关键字不尽相同,所以必须采用关键字比较的排序方法(通常用插入排序)对每个桶进行排序 然后依次将各非空桶内的记录连接(收集)起来即可,16,http:/,17,http:/,桶排序main子图,18,http:/,桶排序的实现说明,简单的设计就是直接利用random()函数产生

7、待排数据 准备一个10行的二维数组a,每一行就是一个桶 将随机数小数后的第一位为09的数字依次放入这10个桶内 很显然,这个算法离不开上一节介绍的插入排序 使用csv格式的文件保存已排序数据,可以留给其他的应用使用,19,http:/,桶排insert_sort_prepare子图 (I),20,http:/,桶排insert_sort_prepare子图 (II),21,http:/,桶排序的输出结果,22,http:/,冒泡排序,冒泡排序(Bubble Sort)的基本概念是: 将被排序的记录数组a1n垂直排列,每个记录ai看作是重量为ai所存数值的气泡 根据轻气泡不能在重气泡之下的原则,

8、从下往上扫描数组a:凡扫描到违反本原则的轻气泡,就使其向上“飘浮“ 如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止,23,http:/,24,http:/,冒泡排序main子图,25,http:/,冒泡算法说明,初始状态: a1n为无序区。 第一次扫描:从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置,第一次扫描完毕时,“最轻“的气泡就飘浮到该区间的顶部,即关键字最小的记录被放在最高位置a1上。 第二次扫描:扫描a2n。扫描完毕时,“次轻“的气泡飘浮到a2的位置上。 最后,经过n-1 趟扫描可得到有序区a1n,26,http:/,冒泡排序,

9、bubble子图,27,http:/,冒泡算法如何改进?,假如待排序列已经是基本有序的(只有两个数字需要换位),如何能够在n-1趟之前,结束排序? 提示:可以将已经排好的数据,有意调换一对,然后使用改进后的算法实验(从文件读入待排数据),28,http:/,快速排序,快速排序(Quick sort)是在冒泡排序基础上做了适当的改进 快速排序是由C. A. R. Hoare在1962年提出的 它采用了分治的策略,是一种划分交换排序算法 被誉为二十世纪“十大经典算法”之一,29,http:/,快速排序的基本思想,通过一趟排序将要排序的数据分割成独立的两部分 其中一部分的所有数据都比另外一部分的所有

10、数据要小 然后再按此方法对这两部分数据分别进行快速排序 整个排序过程可以递归进行,从而使整个数据变为有序序列,30,http:/,31,http:/,快速排序main子图,32,http:/,快速排序QkSort子图,33,http:/,快速排序QkPass子图,34,http:/,RAPTOR中的快速排序,通过实际运行可知,这里实现的“快速排序”尽管可以改善排序算法的时间复杂性,但由于全局变量问题,实际上的空间复杂性很差 可以考虑使用非递归的实现来完成“快速排序”,35,http:/,归并排序,归并排序也叫合并排序是分治法一个非常典型的应用 归并排序法是将两个或更多个有序表合并成一个新的有序

11、表 如果是将两个有序表合并成一个有序表,被称为2-路归并,36,http:/,37,http:/,归并排序main子图,38,http:/,归并排序input子图(I),39,http:/,归并排序input子图(II),40,http:/,归并算法实现的说明,待排的两路数据存放在一个文件中,文件中的头两个数据,分别是两路数据的个数(可以不等长); 在得到线形表的长度后,再用两个数组a、b保存待排数据 第一个排序循环过程是对两个数组的元素逐个进行比对,并输出较小的数据元素; 第二个循环过程是在比对输出完成后,仍有一个线形表的数据尚未输出完毕,所以再将有剩余元素的数组进行输出,41,http:/,归并排序merge子图(I),42,http:/,归并排序merge子图(II),43,http:/,排序算法的分析,冒泡排序显然最容易实现对已经存在的无序线形表进行排序,所以最为最常见; 插入排序对于随机产生的无序数据,可以实现实时排序; 归并排序的前提是存在两个以上已经排序的线形表; 桶排序则适用于可以进行分类的数据排序; 快速排序则是最能体现时间复杂性优化的排序算法,但要关注其在不同的实现环境中,可能因空间复杂性所带来的问题,44,http:/,排序算法的分析,45,http:/,End of ch5-1,46,http:/,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1