归并排序merge子图
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
源自文库
排序术语和实现策略
自然的(natural)
如果某种排序算法对有序的数据排序速度较快( 工作量变小),对无序的数据排序速度却较慢( 工作变量大),这种算法被称为自然排序算法
如果数据已接近有序,就需要考虑选用自然的 排序算法
排序术语和实现策略
稳定的(stable)
如果能保持它认为相等的数据的前后顺序,这 种算法被称为稳定排序算法
冒泡排序main子图
冒泡算法说明
初始状态: a[1..n]为无序区。 第一次扫描:从无序区底部向上依次比较相邻的
两个气泡的重量,若发现轻者在下、重者在上, 则交换二者的位置,第一次扫描完毕时,"最轻" 的气泡就飘浮到该区间的顶部,即关键字最小的 记录被放在最高位置a[1]上。 第二次扫描:扫描a[2..n]。扫描完毕时,"次轻" 的气泡飘浮到a[2]的位置上……。 最后,经过n-1 趟扫描可得到有序区a[1..n]
将随机数小数后的第一位为0~9的数字依次放 入这10个桶内
很显然,这个算法离不开上一节介绍的插 入排序
使用csv格式的文件保存已排序数据,可以 留给其他的应用使用
桶排insert_sort_prepare子图 (I)
桶排insert_sort_prepare子图 (II)
桶排序的输出结果
社会中排序: 会议代表名单的排序(按姓氏笔画); 联大会议的发言顺序(按国家名称字母排序)
计算机如何进行排序?
从”混沌”到有序:排序自身也是一种应 用,同时也为快速的查找提供必要的准备
在计算机科学中,排序(sorting)是研究最 多的问题之一
基本排序算法有5类:
插入排序,例如,直接插入排序,二分插入排序等; 交换排序,例如,冒泡排序,快速排序等; 选择排序,例如,选择排序,推排序等 归并排序,例如,归并排序,多相归并排序等 分布排序,例如,桶排序,基数排序等
学习目标
如何在计算机中进行排序? 排序算法有那些分类? 如何实现常用的排序算法? 查找与排序有何关系? 查找算法有哪些分类? 如何实现常用的查找算法?
何为排序?
学习中的排序:
在一些教课书中,会将涉及到的所有术语排成 索引,作为附录,方便读者在需要时查找
图书馆工作人员的重要工作,就是把归还的书 ,插入适当的书架、层次、位置, 方便读者查阅
快速排序是由C. A. R. Hoare在1962年提出的 它采用了分治的策略,是一种划分交换排序算
在排序过程中,可以按数值大小排序,有时候 需要按字符来排序,有时候需要按照时间的迟 早来排序
实际上,计算机内的所有数据,无论属于哪种 类型数据,都可以转换成数字(二进制或十进 制)表达
所以排序本身可以抽象为对数字进行排序
如何在RAPTOR中实现排序
排序算法测试的数据来源
请回顾第2章提及的随机数生成和存储,以及 使用文件输入数据的方法
冒泡排序
冒泡排序(Bubble Sort)的基本概念是:
将被排序的记录数组a[1..n]垂直排列,每个记 录a[i]看作是重量为a[i]所存数值的气泡
根据轻气泡不能在重气泡之下的原则,从下往 上扫描数组a[]:凡扫描到违反本原则的轻气泡 ,就使其向上"飘浮“
如此反复进行,直到最后任何两个气泡都是轻 者在上,重者在下为止
最后生成含n个记录的有序数组
插入排序main子图
插排look_for_position子图
插排move_to_new_position子图
桶排序
桶排序的思想源于信件分拣
在现实应用中,是把[0,1)的数值划分为n个大小 相同的子区间,每一子区间可以看作是一个桶
然后将n个记录分配到各个桶内
稳定的排序算法可按主、次关键字对数据进行 排序,例如,按照姓氏和名字排序。
在具体实现时,就是先按主关键字排序,再按次关 键字排序
排序术语和实现策略
内部排序和外部排序
待排数据全部在内存中的排序方法被称为内部 排序,待排数据在磁盘、磁带和其它外存中的 排序方法被称为外部排序
本节涉及的排序算法,全部针对内部排序进行 讨论
冒泡排序
bubble子图
冒泡算法如何改进?
假如待排序列已经是基本有序的(只有两 个数字需要换位),如何能够在n-1趟之前 ,结束排序?
提示:可以将已经排好的数据,有意调换一对 ,然后使用改进后的算法实验(从文件读入待 排数据)
快速排序
快速排序(Quick sort)是在冒泡排序基础 上做了适当的改进
直接插入排序
假设data.txt文件中存放着待排序的记录R[] ,则R[]可以看成是一个长度为n的待排数组
首先从data.txt文件中保存的数组R[]读入一 个数据到a[1],生成一个有序数组
由于文件中的数组R[]呈无序状态,从i=2起 至i=n为止,依次将R[i]插入当前的有序数 组a[1..i-1]中
不仅可以节省用户与算法的交互时间 而且可以适当扩大数据集合,验证算法的
效率
直接插入排序
直接插入排序与整理扑克牌的过程非常类 似
第1张牌没有必要整理 以后每次从牌堆(无序区)的最上面摸出1张牌并
插入左手牌(有序区)中正确的位置上
为了确定正确的插入位置,一般从左向右 将摸上来的牌与手中已有的牌逐一比较
由于同一桶内的记录其关键字不尽相同,所以必 须采用关键字比较的排序方法(通常用插入排序) 对每个桶进行排序
然后依次将各非空桶内的记录连接(收集)起来即 可
桶排序main子图
桶排序的实现说明
简单的设计就是直接利用random()函数产 生待排数据
准备一个10行的二维数组a[,]每一行就是一个 桶
排序术语和实现策略
关键字排序(Key sort)
如果要对某班级学生的期末成绩表进行排序, 表中给出了每个学生的学号、姓名、单科成绩 和总成绩等项目
按什么来排序?所选结果,就是关键字 本章所有案例中,只考虑关键字字段,而先将
信息的其他内容一概略去
排序术语和实现策略
数字化排序(digitized sort)
排序术语和实现策略
自然的(natural)
如果某种排序算法对有序的数据排序速度较快( 工作量变小),对无序的数据排序速度却较慢( 工作变量大),这种算法被称为自然排序算法
如果数据已接近有序,就需要考虑选用自然的 排序算法
排序术语和实现策略
稳定的(stable)
如果能保持它认为相等的数据的前后顺序,这 种算法被称为稳定排序算法
冒泡排序main子图
冒泡算法说明
初始状态: a[1..n]为无序区。 第一次扫描:从无序区底部向上依次比较相邻的
两个气泡的重量,若发现轻者在下、重者在上, 则交换二者的位置,第一次扫描完毕时,"最轻" 的气泡就飘浮到该区间的顶部,即关键字最小的 记录被放在最高位置a[1]上。 第二次扫描:扫描a[2..n]。扫描完毕时,"次轻" 的气泡飘浮到a[2]的位置上……。 最后,经过n-1 趟扫描可得到有序区a[1..n]
将随机数小数后的第一位为0~9的数字依次放 入这10个桶内
很显然,这个算法离不开上一节介绍的插 入排序
使用csv格式的文件保存已排序数据,可以 留给其他的应用使用
桶排insert_sort_prepare子图 (I)
桶排insert_sort_prepare子图 (II)
桶排序的输出结果
社会中排序: 会议代表名单的排序(按姓氏笔画); 联大会议的发言顺序(按国家名称字母排序)
计算机如何进行排序?
从”混沌”到有序:排序自身也是一种应 用,同时也为快速的查找提供必要的准备
在计算机科学中,排序(sorting)是研究最 多的问题之一
基本排序算法有5类:
插入排序,例如,直接插入排序,二分插入排序等; 交换排序,例如,冒泡排序,快速排序等; 选择排序,例如,选择排序,推排序等 归并排序,例如,归并排序,多相归并排序等 分布排序,例如,桶排序,基数排序等
学习目标
如何在计算机中进行排序? 排序算法有那些分类? 如何实现常用的排序算法? 查找与排序有何关系? 查找算法有哪些分类? 如何实现常用的查找算法?
何为排序?
学习中的排序:
在一些教课书中,会将涉及到的所有术语排成 索引,作为附录,方便读者在需要时查找
图书馆工作人员的重要工作,就是把归还的书 ,插入适当的书架、层次、位置, 方便读者查阅
快速排序是由C. A. R. Hoare在1962年提出的 它采用了分治的策略,是一种划分交换排序算
在排序过程中,可以按数值大小排序,有时候 需要按字符来排序,有时候需要按照时间的迟 早来排序
实际上,计算机内的所有数据,无论属于哪种 类型数据,都可以转换成数字(二进制或十进 制)表达
所以排序本身可以抽象为对数字进行排序
如何在RAPTOR中实现排序
排序算法测试的数据来源
请回顾第2章提及的随机数生成和存储,以及 使用文件输入数据的方法
冒泡排序
冒泡排序(Bubble Sort)的基本概念是:
将被排序的记录数组a[1..n]垂直排列,每个记 录a[i]看作是重量为a[i]所存数值的气泡
根据轻气泡不能在重气泡之下的原则,从下往 上扫描数组a[]:凡扫描到违反本原则的轻气泡 ,就使其向上"飘浮“
如此反复进行,直到最后任何两个气泡都是轻 者在上,重者在下为止
最后生成含n个记录的有序数组
插入排序main子图
插排look_for_position子图
插排move_to_new_position子图
桶排序
桶排序的思想源于信件分拣
在现实应用中,是把[0,1)的数值划分为n个大小 相同的子区间,每一子区间可以看作是一个桶
然后将n个记录分配到各个桶内
稳定的排序算法可按主、次关键字对数据进行 排序,例如,按照姓氏和名字排序。
在具体实现时,就是先按主关键字排序,再按次关 键字排序
排序术语和实现策略
内部排序和外部排序
待排数据全部在内存中的排序方法被称为内部 排序,待排数据在磁盘、磁带和其它外存中的 排序方法被称为外部排序
本节涉及的排序算法,全部针对内部排序进行 讨论
冒泡排序
bubble子图
冒泡算法如何改进?
假如待排序列已经是基本有序的(只有两 个数字需要换位),如何能够在n-1趟之前 ,结束排序?
提示:可以将已经排好的数据,有意调换一对 ,然后使用改进后的算法实验(从文件读入待 排数据)
快速排序
快速排序(Quick sort)是在冒泡排序基础 上做了适当的改进
直接插入排序
假设data.txt文件中存放着待排序的记录R[] ,则R[]可以看成是一个长度为n的待排数组
首先从data.txt文件中保存的数组R[]读入一 个数据到a[1],生成一个有序数组
由于文件中的数组R[]呈无序状态,从i=2起 至i=n为止,依次将R[i]插入当前的有序数 组a[1..i-1]中
不仅可以节省用户与算法的交互时间 而且可以适当扩大数据集合,验证算法的
效率
直接插入排序
直接插入排序与整理扑克牌的过程非常类 似
第1张牌没有必要整理 以后每次从牌堆(无序区)的最上面摸出1张牌并
插入左手牌(有序区)中正确的位置上
为了确定正确的插入位置,一般从左向右 将摸上来的牌与手中已有的牌逐一比较
由于同一桶内的记录其关键字不尽相同,所以必 须采用关键字比较的排序方法(通常用插入排序) 对每个桶进行排序
然后依次将各非空桶内的记录连接(收集)起来即 可
桶排序main子图
桶排序的实现说明
简单的设计就是直接利用random()函数产 生待排数据
准备一个10行的二维数组a[,]每一行就是一个 桶
排序术语和实现策略
关键字排序(Key sort)
如果要对某班级学生的期末成绩表进行排序, 表中给出了每个学生的学号、姓名、单科成绩 和总成绩等项目
按什么来排序?所选结果,就是关键字 本章所有案例中,只考虑关键字字段,而先将
信息的其他内容一概略去
排序术语和实现策略
数字化排序(digitized sort)