数据结构与算法数据结构与算法 (10).ppt
《数据结构与算法数据结构与算法 (10).ppt》由会员分享,可在线阅读,更多相关《数据结构与算法数据结构与算法 (10).ppt(135页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、算法与数据结构算法与数据结构2 2第第四四部分部分 集合结构集合结构n集合中的元素互相之间没有关系集合中的元素互相之间没有关系n集合的存储:借用其他容器集合的存储:借用其他容器n集合的操作:查找和排序集合的操作:查找和排序n这一部分将介绍这一部分将介绍n查找表查找表(静态查找表、动态查找表静态查找表、动态查找表)n散列表散列表n排序算法排序算法3 3第第 12 12 章章 排序排序n12.1 12.1 排序的基本概念排序的基本概念n12.2 12.2 插入排序插入排序n12.3 12.3 交换排序交换排序n12.4 12.4 选择排序选择排序n12.5 12.5 归并排序归并排序n*12.6
2、12.6 基数排序基数排序n12.712.7 各种内部排序方法的比较各种内部排序方法的比较n*12.8 12.8 外部排序外部排序n*内容可不讲内容可不讲4 4排序问题排序问题nGoogleGoogle等搜索引擎返回结果排级等搜索引擎返回结果排级n图书馆员书目编号、上架图书馆员书目编号、上架n各种排名各种排名n大学排名大学排名n考试成绩排名考试成绩排名n福布斯福布斯 富豪榜富豪榜nWindowsWindows资源管理器,文件查看资源管理器,文件查看n5 5n所谓排序就是把集合中的数据元素按照它们的关键所谓排序就是把集合中的数据元素按照它们的关键字的非递减或非递增序排成一个序列。字的非递减或非递
3、增序排成一个序列。n内排序与外排序:内排序与外排序:n内排序是指被排序的数据元素全部存放在计算机的内存内排序是指被排序的数据元素全部存放在计算机的内存之中,并且在内存中调整数据元素的相对位置。之中,并且在内存中调整数据元素的相对位置。n外排序是指在排序的过程中,数据元素主要存放在外存外排序是指在排序的过程中,数据元素主要存放在外存储器中,借助于内存储器逐步调整数据元素之间的相对储器中,借助于内存储器逐步调整数据元素之间的相对位置。位置。排序的基本概念排序的基本概念6 6n稳定排序稳定排序n存在多个具有相同排序码的记录存在多个具有相同排序码的记录n排序后这些记录的相对次序保持不变排序后这些记录的
4、相对次序保持不变 n稳定性例稳定性例1 1n 3434 12 12 3434 08 96 08 96n 08 12 08 12 3434 3434 96 96 稳定!定!排序的基本概念排序的基本概念7 7n稳定性稳定性n存在多个具有相同排序码的记录存在多个具有相同排序码的记录n排序后这些记录的相对次序保持不变排序后这些记录的相对次序保持不变 n稳定性例稳定性例2 2n 3434 12 12 3434 08 96 08 96n 08 12 08 12 3434 34 34 96 96 不不稳定!定!排序的基本概念排序的基本概念8 8排序排序算法算法的衡量标准的衡量标准n时间代价时间代价记录的比较
5、和移动次数记录的比较和移动次数 n空间代价空间代价n算法本身的繁杂程度算法本身的繁杂程度 9 9第第 12 12 章章 排序排序n12.1 12.1 排序的基本概念排序的基本概念n12.2 12.2 插入排序插入排序n12.2.1 12.2.1 直接插入排序直接插入排序n12.2.2 12.2.2 折半插入排序折半插入排序n12.2.3 12.2.3 希尔排序希尔排序n12.3 12.3 交换排序交换排序n12.4 12.4 选择排序选择排序n12.5 12.5 归并排序归并排序n*12.6 12.6 基数排序基数排序n12.712.7 各种内部排序方法的比较各种内部排序方法的比较n*12.8
6、 12.8 外部排序外部排序1010直接直接插入排序插入排序n直接直接插入排序插入排序(Straight Insertion SortStraight Insertion Sort):假设):假设在在排序过程中,记录序列为排序过程中,记录序列为R0.n-1R0.n-1,首先将第一个记,首先将第一个记录录R0R0看做一个有序子序列,然后依次将记录看做一个有序子序列,然后依次将记录RiRi(1in-11in-1)插入到有序子序列)插入到有序子序列R0.i-1R0.i-1中,中,使记录的有序子序列从使记录的有序子序列从R0.i-1R0.i-1变为变为R0.iR0.i。1111直接直接插入排序插入排序
7、算法与数据结构1212直接插入排序直接插入排序1234322964453478 发现逆序逆序对,交,交换吗?1313n 代码代码12.112.1template template void straightInsertSort(Type R,int size)void straightInsertSort(Type R,int size)int pos,j;int pos,j;/pospos为待插入记录位置为待插入记录位置 Type tmp;Type tmp;for(pos=1;pos size;pos+)for(pos=1;pos size;pos+)tmp=Rpos;tmp=Rpos;/将
8、待插入记录放进临时将待插入记录放进临时变量变量 /从后向前查找插入从后向前查找插入位置位置 for(j=pos-1;tmp=0;j-)for(j=pos-1;tmp=0;j-)Rj+1 Rj+1=Rj;=Rj;/将大于待插入记录的记录向后移动将大于待插入记录的记录向后移动 Rj+1=tmp;Rj+1=tmp;/将待插入记录放到合适位置将待插入记录放到合适位置 算法与数据结构直接直接插入排序插入排序1414算法分析算法分析n稳定稳定n空间代价:空间代价:O(1)O(1)n时间代价:时间代价:n最佳情况:最佳情况:n-1n-1次比较,次比较,2(n-1)2(n-1)次移动,次移动,(n)(n)n最
9、差情况:最差情况:O(nO(n2 2)比较次数比较次数为为移动移动次数为次数为n平均情况:平均情况:O(nO(n2 2)n适用情况:排序元数较少,且几乎是已排序的适用情况:排序元数较少,且几乎是已排序的15152023/3/302023/3/301515直接插入排序的优缺点直接插入排序的优缺点n直接直接插入排序算法简单插入排序算法简单,当待排序记录数量当待排序记录数量n n很很小时小时,局部有序时局部有序时,较为适用较为适用。当。当n n很大时很大时,其效其效率不高率不高。n若若对直接插入排序算法进行改进对直接插入排序算法进行改进,可从减少可从减少“比比较较”和和“移动移动”次数这两方面着手次
10、数这两方面着手。n折半折半存入排序、二路插入排序、表插入排序、存入排序、二路插入排序、表插入排序、希尔排序都是对直接插入排序的改进希尔排序都是对直接插入排序的改进。1616第第 12 12 章章 排序排序n12.1 12.1 排序的基本概念排序的基本概念n12.2 12.2 插入排序插入排序n12.2.1 12.2.1 直接插入排序直接插入排序n12.2.2 12.2.2 折半插入排序折半插入排序n12.2.3 12.2.3 希尔排序希尔排序n12.3 12.3 交换排序交换排序n12.4 12.4 选择排序选择排序n12.5 12.5 归并排序归并排序n*12.6 12.6 基数排序基数排序
11、n12.712.7 各种内部排序方法的比较各种内部排序方法的比较n*12.8 12.8 外部排序外部排序1717 折半插入排序折半插入排序n折半插入排序折半插入排序(Binary Insertion SortBinary Insertion Sort):当):当第第i i个记录个记录要插入前要插入前i i1 1个有序记录序列时,可利用折半查找(在查个有序记录序列时,可利用折半查找(在查找章节已介绍)方式确定插入位置,以减少比较次数。找章节已介绍)方式确定插入位置,以减少比较次数。从从而达到减少比较次数的目的而达到减少比较次数的目的 n 代码代码12.212.2template template
12、 void binaryInsertSort(Type R,int size)void binaryInsertSort(Type R,int size)int pos,j,low,high,mid;int pos,j,low,high,mid;Type tmp;Type tmp;1818 for(pos=1;possize;pos for(pos=1;possize;pos+)/+)/假定第一个记录有序假定第一个记录有序 tmp tmp=Rpos;=Rpos;/将待排记录将待排记录RposRpos暂存到暂存到tmptmp low low=0;high=pos-1=0;high=pos-1;/
13、;/设置折半查找的范围设置折半查找的范围 while(low=high)while(low=high)/折半查找插入折半查找插入位置位置 mid=(low+high)/2;mid=(low+high)/2;/计算中间位置计算中间位置 if(tmp Rmid)high=mid-1;if(tmp=low;j-)for(j=pos-1;j=low;j-)Rj+1=Rj;Rj+1=Rj;/记录后移记录后移 Rlow=tmp;Rlow=tmp;/插入待排序记录插入待排序记录 折半插入排序折半插入排序1919n折半插入排序比直接插入排序明显地减少了关键字间的折半插入排序比直接插入排序明显地减少了关键字间的
14、“比较比较”次数,但记录次数,但记录“移动移动”的次数不变,故其时间复杂的次数不变,故其时间复杂度仍为度仍为O O(n n2 2)。)。算法与数据结构算法分析算法分析2020自测题自测题1 1对同一待排序列分别进行折半插入排序和直接插入排对同一待排序列分别进行折半插入排序和直接插入排序,两者之间可能的不同之处是(序,两者之间可能的不同之处是()。)。A A排序的总趟数排序的总趟数B B元素的移动次数元素的移动次数C C使用辅助空间的数量使用辅助空间的数量D D元素之间的比较次数元素之间的比较次数【20122012年全国硕士研究生入学统一考试计算机学科专业基础综合】年全国硕士研究生入学统一考试计
15、算机学科专业基础综合】【参考答案】【参考答案】D D算法与数据结构2121第第 12 12 章章 排序排序n12.1 12.1 排序的基本概念排序的基本概念n12.2 12.2 插入排序插入排序n12.2.1 12.2.1 直接插入排序直接插入排序n12.2.2 12.2.2 折半插入排序折半插入排序n12.2.3 12.2.3 希尔排序希尔排序n12.3 12.3 交换排序交换排序n12.4 12.4 选择排序选择排序n12.5 12.5 归并排序归并排序n*12.6 12.6 基数排序基数排序n12.712.7 各种内部排序方法的比较各种内部排序方法的比较n*12.8 12.8 外部排序外
16、部排序2222希尔排序希尔排序n希尔排序希尔排序(Shell SortShell Sort)又称为缩小增量排序,是由)又称为缩小增量排序,是由D.L.ShellD.L.Shell在在19591959年提出的。年提出的。ShellShell从从“减少记录个数减少记录个数”和和“基本有序基本有序”两方面对直接插入排序进行了改进。两方面对直接插入排序进行了改进。n希尔排序的基本思想是:将待排序的记录划分成几组,希尔排序的基本思想是:将待排序的记录划分成几组,间距相同的记录分在一组,对各组分别实施直接插入间距相同的记录分在一组,对各组分别实施直接插入排序。当经过几次分组排序后,记录的排列已经基本排序。
17、当经过几次分组排序后,记录的排列已经基本有序,再对所有的记录实施最后的直接插入排序。有序,再对所有的记录实施最后的直接插入排序。n通过分组,一方面减少了参与直接插入排序的数据量;通过分组,一方面减少了参与直接插入排序的数据量;另一方面先比较那些间距较大的记录,避免频繁的移另一方面先比较那些间距较大的记录,避免频繁的移动相邻记录。当待排序记录个数较少且待排序记录已动相邻记录。当待排序记录个数较少且待排序记录已基本有序时,直接插入排序的效率是较高的。基本有序时,直接插入排序的效率是较高的。2323希尔排序算法思想希尔排序算法思想n对于有对于有n n个记录的初始序列,希尔排序的具体步骤如下:个记录的
18、初始序列,希尔排序的具体步骤如下:n(1)(1)首先取一个整数首先取一个整数gapngapn作为增量;作为增量;n(2)(2)将全部记录分为将全部记录分为gapgap个子序列,所有间距为个子序列,所有间距为gapgap的的记录分在同一个子序列中,对每个子序列分别实施直记录分在同一个子序列中,对每个子序列分别实施直接插入排序;接插入排序;n(3)(3)然后缩小增量然后缩小增量gapgap,重复步骤,重复步骤(2)(2)的子序列划分和的子序列划分和排序工作,直到最后排序工作,直到最后gapgap等于等于1 1,将所有记录放在一组,将所有记录放在一组,进行最后一次直接插入排序。进行最后一次直接插入排
19、序。2424GapGap的选取的选取算法与数据结构2525希尔排序希尔排序算法与数据结构2626希希尔排序的实现尔排序的实现 n若以若以ShellShell提出的分组方法,则提出的分组方法,则ShellShell排序的算法排序的算法如下如下n 代码代码12.312.3template template void shellSort(Type R,int size)void shellSort(Type R,int size)int gap,pos,j;int gap,pos,j;/gap/gap为希尔为希尔增量增量,pospos为待插入记录为待插入记录位置位置 Type tmp;Type tm
20、p;for(gap=size/2;gap 0;gap/=2 for(gap=size/2;gap 0;gap/=2)for(pos=gap;pos size;pos+)for(pos=gap;pos=0&Rj tmp;j-=gap)for(j=pos-gap;j=0&Rj tmp;j-=gap)Rj+gap=Rj;Rj+gap=Rj;/记录后移记录后移 Rj+gap=tmp;Rj+gap=tmp;/将待插入记录放到合适位置将待插入记录放到合适位置 2727性能分析性能分析n不同的增量序列有不同的时间性能。不同的增量序列有不同的时间性能。n希尔排序适用于待排序的记录数目较大的情况。希尔排序适用于
21、待排序的记录数目较大的情况。n希希尔尔排序存在大跨度的元素移动,是排序存在大跨度的元素移动,是一种不稳定的排序方法一种不稳定的排序方法。n希希尔排序的时间性能与其选定的增量序列有关,有人在大量尔排序的时间性能与其选定的增量序列有关,有人在大量实验的基础上推导出,希尔排序的时间复杂度约为实验的基础上推导出,希尔排序的时间复杂度约为O O(n n1.31.3)。n空间空间复杂度为复杂度为O(1)O(1)。2828自测题自测题2 2用希尔排序方法对一个数据序列进行排序时,若第用希尔排序方法对一个数据序列进行排序时,若第1 1趟排趟排序结果为序结果为9 9,1 1,4 4,1313,7 7,8 8,2
22、020,2323,1515,则该趟排序采,则该趟排序采用的增量(间隔)可能是(用的增量(间隔)可能是()。)。A A2 2B B3 3C C4 4D D5 5【20122012年全国硕士研究生入学统一考试计算机学科专业基础综合】年全国硕士研究生入学统一考试计算机学科专业基础综合】【参考答案】【参考答案】B B算法与数据结构2929自测题自测题3 3希尔排序的组内排序采用的是(希尔排序的组内排序采用的是()。)。A A直接插入排序直接插入排序 B B折半插入排序折半插入排序C C快速排序快速排序 D D归并排序归并排序【20152015年全国硕士研究生入学统一考试计算机学科专业基础综合】年全国硕
23、士研究生入学统一考试计算机学科专业基础综合】【参考答案】【参考答案】A A算法与数据结构30302023/3/302023/3/303030*自测题:希尔排序自测题:希尔排序二趟排序二趟排序结果:果:17 10 51 33 28 51 52 62 96 87三趟排序三趟排序结果:果:10 17 28 33 51 51 52 62 87 96初始关初始关键字序列:字序列:51 33 62 96 87 17 28 51 52 10一趟排序一趟排序结果:果:17 28 51 52 10 51 33 62 96 8731312023/3/302023/3/303131*自测题自测题请给出对一组记录请给
24、出对一组记录(54,38,96,23,15,90,72,60,45,8354,38,96,23,15,90,72,60,45,83)进行希尔排序(增量序列为进行希尔排序(增量序列为5,3,15,3,1)时的排序过程。)时的排序过程。3232第第 12 12 章章 排序排序n12.1 12.1 排序的基本概念排序的基本概念n12.2 12.2 插入排序插入排序n12.3 12.3 交换排序交换排序n12.3.1 12.3.1 冒泡排序冒泡排序n12.3.2 12.3.2 快速排序快速排序n12.4 12.4 选择排序选择排序n12.5 12.5 归并排序归并排序n*12.6 12.6 基数排序基
25、数排序n12.712.7 各种内部排序方法的比较各种内部排序方法的比较n*12.8 12.8 外部排序外部排序3333冒泡排序冒泡排序n冒泡排序冒泡排序(Bubble Sort(Bubble Sort,也称为起泡排序,也称为起泡排序)是一种比较简是一种比较简单的交换排序方法。它的基本思想是对所有相邻记录的关单的交换排序方法。它的基本思想是对所有相邻记录的关键字值进行比较,如果不满足排序要求(即逆序),则将键字值进行比较,如果不满足排序要求(即逆序),则将其交换,最终直到所有记录排好序为止其交换,最终直到所有记录排好序为止。3434冒泡排序冒泡排序n对于由对于由n n个记录序列个记录序列的非递减
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构与算法数据结构与算法 10 数据结构 算法 10
限制150内