数据结构第10章排序.ppt





《数据结构第10章排序.ppt》由会员分享,可在线阅读,更多相关《数据结构第10章排序.ppt(52页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、电子工程学院电子工程学院电子工程学院电子工程学院第第10章章 内部排序内部排序12/25/20221电子工程学院电子工程学院电子工程学院电子工程学院上一页下一页回主目录1 1 概述概述2 2 插入排序(直接插入排序、希尔排序)插入排序(直接插入排序、希尔排序)3 3直接选择排序直接选择排序4 4交换排序交换排序(起泡排序、起泡排序、快速排序快速排序)5 5归并排序归并排序6 6内部排序方法的比较内部排序方法的比较习题习题12/25/20222电子工程学院电子工程学院电子工程学院电子工程学院上一页下一页回主目录1 1 概述概述n基本概念基本概念基本概念基本概念n定义:将文件中的数据记录按关键字值
2、的递增或递定义:将文件中的数据记录按关键字值的递增或递定义:将文件中的数据记录按关键字值的递增或递定义:将文件中的数据记录按关键字值的递增或递减的顺序排列起来。减的顺序排列起来。减的顺序排列起来。减的顺序排列起来。R R1,1,R R2,.,2,.,R Rn n R Ri1,i1,R Ri2,.,i2,.,R Rinin 其中关键字其中关键字其中关键字其中关键字 k k1,1,k k2,.,2,.,k kn n 有序序列有序序列有序序列有序序列 k ki1,i1,k ki2,.,i2,.,k kininn排序方法的稳定性:排序方法的稳定性:排序方法的稳定性:排序方法的稳定性:对于对于对于对于k
3、 ki ik kj j的记录的记录的记录的记录R Ri iR Rj j(R Ri i在在在在R Rj j之前)之前)之前)之前),排序后:排序后:排序后:排序后:R Ri i仍在仍在仍在仍在R Rj j之前,则排序方法是稳定的;之前,则排序方法是稳定的;之前,则排序方法是稳定的;之前,则排序方法是稳定的;R Ri i在在在在R Rj j之后,之后,之后,之后,则排序方法是不稳定的;则排序方法是不稳定的;则排序方法是不稳定的;则排序方法是不稳定的;12/25/20223电子工程学院电子工程学院电子工程学院电子工程学院上一页下一页回主目录n n基本概念基本概念基本概念基本概念n n方法分类:方法分
4、类:方法分类:方法分类:u内部排序:在内存中进行,适于小文件内部排序:在内存中进行,适于小文件u外部排序:使用内存和外存,适于大文件,内存不够用外部排序:使用内存和外存,适于大文件,内存不够用内部排序内部排序内部排序内部排序:文件可有三种存储结构:文件可有三种存储结构:文件可有三种存储结构:文件可有三种存储结构(1)(1)一维数组:对记录的物理位置重排一维数组:对记录的物理位置重排一维数组:对记录的物理位置重排一维数组:对记录的物理位置重排(2)(2)链表:修改指针链表:修改指针链表:修改指针链表:修改指针(3)(3)索引表:对索引进行物理重排,记录位置不动(由于不方便索引表:对索引进行物理重
5、排,记录位置不动(由于不方便索引表:对索引进行物理重排,记录位置不动(由于不方便索引表:对索引进行物理重排,记录位置不动(由于不方便移动等原因)移动等原因)移动等原因)移动等原因)本章仅考虑:记录数组本章仅考虑:记录数组本章仅考虑:记录数组本章仅考虑:记录数组RnRn,关键字,关键字,关键字,关键字keykey为整数为整数为整数为整数n n标准:标准:标准:标准:执行时间执行时间执行时间执行时间(最重要的标志最重要的标志最重要的标志最重要的标志),所需空间,算法复杂度,所需空间,算法复杂度,所需空间,算法复杂度,所需空间,算法复杂度 排序的时间代价主要指:算法中关键字的比较次数和记录的排序的时
6、间代价主要指:算法中关键字的比较次数和记录的 移动次数移动次数12/25/20224电子工程学院电子工程学院电子工程学院电子工程学院上一页下一页回主目录以以记记录录数数组组作作为为文文件件的的存存储储结结构构,关关键键字字为为整整数数,文文件件类类型说明如下:型说明如下:typedefstruct/*定义记录为结构类型定义记录为结构类型*/intkey;/*关键字域关键字域*/datatypeother;/*记录的其他域记录的其他域*/rectype;rectypeRn;/*R为记录类型的数组为记录类型的数组*/其中:其中:n为文件的记录总数。为文件的记录总数。12/25/20225电子工程学
7、院电子工程学院电子工程学院电子工程学院上一页下一页回主目录2 2 插入排序插入排序将记录分为有序区和无序区,每次将无序区的第将记录分为有序区和无序区,每次将无序区的第一个记录插入到有序区的适当位置,使之保持有序。一个记录插入到有序区的适当位置,使之保持有序。2.1直接插入排序直接插入排序(最简单最简单)具体做法:具体做法:把把第第i个个记记录录Ri插插入入到到有有序序区区R1,R2,Ri-1;将将关关键键字字ki依依次次与与关关键键字字ki-1,ki-2,k1进进行行比比较较,从从而而找找到到应应该该插插入入的的位位置置,然后将然后将ki插入。插入。12/25/20226电子工程学院电子工程学
8、院电子工程学院电子工程学院上一页下一页回主目录假设假设R1Rn为待排序的记录区,下面给出算法描述:为待排序的记录区,下面给出算法描述:INSERTSORT(rectypeR)/对数组对数组R按递增序进行插入排序按递增序进行插入排序/R0是监视哨是监视哨*/inti,j;for(i=2;i=n;i+)/*依次插入依次插入R2,Rn*/R0=Ri;j=i 1;while(R0.keyRj.key)/*查找查找Ri的插入位置的插入位置*/Rj+1=Rj;j-;/将关键字大于将关键字大于Ri.key的记录后移的记录后移Rj+1=R0;/*插入插入Ri*/*INSERTSORT*/12/25/20227
9、电子工程学院电子工程学院电子工程学院电子工程学院上一页下一页回主目录算法采用的是查找比较操作和记录移动操作交替进行的方法算法采用的是查找比较操作和记录移动操作交替进行的方法具体做法具体做法是:是:将待插入记录将待插入记录Ri的关键字依次与有序区中记录的关键字依次与有序区中记录Rj(j=i 1,i 2,1)的关键字进行比较,若的关键字进行比较,若Rj的关键字的关键字大于大于Ri的关键字,则将的关键字,则将Rj后移一个位置;若后移一个位置;若Rj的关键字的关键字小于或等于小于或等于Ri的关键字,则查找过程结束,的关键字,则查找过程结束,j+1即为即为Ri的的插入位置。因为关键字比插入位置。因为关键
10、字比Ri大的记录均已后移,故只要将大的记录均已后移,故只要将Ri插入该位置即可。插入该位置即可。附加记录附加记录R0,其作用有两个其作用有两个:1.进进入入查查找找循循环环之之前前,它它保保存存了了Ri的的副副本本,使使得得不不致致于于因因记记录的后移而丢失录的后移而丢失Ri中的内容;中的内容;2.在在while循循环环中中“监监视视”下下标标变变量量j是是否否越越界界,以以避避免免循循环环内内每每次次都都要要检检测测j是是否否越越界界。因因此此,我我们们将将R0称称为为“监监视视哨哨”,这使得测试循环条件的时间大约减少一半。,这使得测试循环条件的时间大约减少一半。12/25/20228电子工
11、程学院电子工程学院电子工程学院电子工程学院上一页下一页回主目录根根据据上上述述算算法法,我我们们用用一一例例子子来来说说明明直直接接插插入入排排序序的的过过程程。设设待待排排序序的的文文件件有有八八个个记记录录,其其关关键键字字分分别别为为47,33,61,82,72,11,25,47,直接插入排序过程如图,直接插入排序过程如图14.1所示。所示。12/25/20229电子工程学院电子工程学院电子工程学院电子工程学院上一页下一页回主目录直接插入排序的算法分析直接插入排序的算法分析:整整个个排排序序过过程程只只有有两两种种运运算算,即即比比较较关关键键字字和和移移动动记记录录。外循环外循环:n
12、1趟插入排序;趟插入排序;内循环内循环:每一趟排序所需进行的关键字的比较和记录的后移。:每一趟排序所需进行的关键字的比较和记录的后移。文件正序时文件正序时:每趟排序的关键字比较次数为每趟排序的关键字比较次数为1,总的比较次数,总的比较次数Cmin=n 1;每趟记录移动次数是每趟记录移动次数是2次,总的移动次数次,总的移动次数Mmin=2(n 1);文件逆序时文件逆序时:关键字的比较次数和记录移动次数均取最大值。:关键字的比较次数和记录移动次数均取最大值。每趟进行每趟进行i次比较次比较:与前与前i 1个记录及个记录及“监视哨监视哨”进行比较进行比较每每趟趟排排序序中中除除了了上上面面提提到到的的
13、两两次次移移动动外外,还还需需将将关关键键字字大大于于Ri的记录后移一个位置。的记录后移一个位置。因此,总的比较次数和记录的移动次数为因此,总的比较次数和记录的移动次数为:12/25/202210电子工程学院电子工程学院电子工程学院电子工程学院上一页下一页回主目录在随机情况下在随机情况下:关键字各种排列出现的概率相同,则可取上述两种情况的关键字各种排列出现的概率相同,则可取上述两种情况的平均值作为比较和记录移动的平均次数,平均值作为比较和记录移动的平均次数,约为约为n2/4。由此,直由此,直接插入排序的时间复杂度为接插入排序的时间复杂度为O(n2),空间复杂度为空间复杂度为O(1)。直接插入排
14、序是稳定的排序方法。直接插入排序是稳定的排序方法。12/25/202211电子工程学院电子工程学院电子工程学院电子工程学院上一页下一页回主目录2.2希尔排序希尔排序希希尔尔排排序序(Shells method)又又称称为为“缩缩小小增增量量排排序序”(DiminishingIncrementSort)。)。基基本本思思想想:先先取取一一个个小小于于n的的整整数数d1并并作作为为第第一一个个增增量量,将将文文件件的的全全部部记记录录分分成成d1个个组组,所所有有距距离离为为d1倍倍数数的的记记录录放放在在同同一一个个组组中中,在在各各组组内内进进行行直直接接插插入入排排序序;然然后后取取第第二二
15、个个增增量量d2d1,重重 复复 上上 述述 的的 分分 组组 和和 排排 序序,直直 至至 所所 取取 的的 增增 量量dt=1(dtdt 1d2d1)为为止止,此此时时,所所有有的的记记录录放放在在同同一一组组中中进行直接插入排序。进行直接插入排序。12/25/202212电子工程学院电子工程学院电子工程学院电子工程学院上一页下一页回主目录例例:设待排序文件共有:设待排序文件共有10个记录,其关键字分别为个记录,其关键字分别为47,33,61,82,71,11,25,47,57,02,增量序列取值依次为,增量序列取值依次为5,3,1。排序过程如下:。排序过程如下:12/25/202213电
16、子工程学院电子工程学院电子工程学院电子工程学院上一页下一页回主目录算法设计:如何设置监视哨?算法设计:如何设置监视哨?设设某某一一趟趟希希尔尔排排序序的的增增量量为为h,则则整整个个文文件件被被分分成成h组组:(R1,Rh+1,R2h+1,),(R2,Rh+2,R2h+2,),,(Rh,R2h,R3h,),因因为为各各组组中中记记录录之之间间的的距距离离均均是是h,故故第第1组组至至第第h组的哨兵位置依次为组的哨兵位置依次为1 h,2 h,0。如如果果像像直直接接插插入入排排序序算算法法那那样样,将将待待插插入入记记录录Ri(h+1in)在在查查找找插插入入位位置置之之前前保保存存到到监监视视
17、哨哨中中,那那么么必必须须先先计计算算Ri属属于于哪哪一一组组,才才能能决决定定使使用用哪哪个个监监视视哨哨来来保保存存Ri。为为了了避避免免这这种种计计算算,我我们们可可以以将将Ri保保存存到到另另一一个个辅辅助助记记录录x中中,而而将将所所有有监监视视哨哨R1 h,R2 h,R0的的关关键键字字设设置置为为小小于于文文件件中中任任何何关关键键字字即即可可。因因为为增增量量是是变变化化的的,所所以以各各趟趟排排序序中中所所需需的的监监视视哨哨数数目目也也不不同同,但但是是我我们们可可以以按按最最大大增增量量d来来设设置置监监视视哨哨。具具体体算算法法描述如下:描述如下:12/25/20221
18、4电子工程学院电子工程学院电子工程学院电子工程学院上一页下一页回主目录rectypeRn+d;/*R0Rd 1为为d个监视哨个监视哨,d=d0*/intdt;/*d0dt 1为增量序列为增量序列*/SHELLSORT(rectypeR,intd)inti,j,k,h;rectypetemp;intmaxint=32767;/*机器中的最大整数机器中的最大整数*/for(i=0;id0;i+)Ri.key=maxint;/*设置哨兵设置哨兵*/k=0;do h=dk;/*取本趟增量取本趟增量*/for(i=d+h;in+d;i+)/*Rh+dRn+d 1插入当前有序区插入当前有序区*/temp=
19、Ri;/*保存待插入记录保存待插入记录*/j=i h;while(temp.keyRj.key)/*查找正确的插入位置查找正确的插入位置*/Rj+h=Rj;/*后移记录后移记录*/j=j h;/*得到前一记录位置得到前一记录位置*/Rj+h=temp;/*插入插入Ri*/*本趟排序完成本趟排序完成*/k+;while(h!=1);/*增量为增量为1排序后终止算法排序后终止算法*/*SHELLSORT具具体体算算法法描描述述如如下下:12/25/202215电子工程学院电子工程学院电子工程学院电子工程学院上一页下一页回主目录分析分析:实质是一种插入排序,比直接插入排序快,但不稳定;:实质是一种插
20、入排序,比直接插入排序快,但不稳定;主要特点主要特点:1.每每一一趟趟以以不不同同的的增增量量进进行行排排序序。例例如如第第一一趟趟增增量量为为5,第第二二趟趟增增量量为为3,第第三三趟趟增增量量为为1。在在前前两两趟趟的的插插入入排排序序中中,记记录录的的关关键键字字是是和和同同一一组组中中的的前前一一个个关关键键字字进进行行比比较较,由由于于此此时时增增量量取取值值较较大大,所所以以关关键键字字较较小小的的记记录录在在排排序序过过程程中中就就不不是是一一步一步地向前移动,而是作跳跃式的移动。步一步地向前移动,而是作跳跃式的移动。2.开开始始时时,增增量量取取值值较较大大,每每组组中中记记录
21、录较较少少,故故排排序序比比较较快快;随随后后,增增量量值值变变小小,每每组组中中记记录录变变多多,但但此此时时记记录录已已基基本本有有序序了了,因因次次在在进进行行最最后后一一趟趟增增量量为为1的的插插入入排排序序时时,只只需需作作少少量的比较和移动便可完成排序,从而提高了排序速度。量的比较和移动便可完成排序,从而提高了排序速度。如何选择增量序列?如何选择增量序列?希尔本人最初提出取希尔本人最初提出取d1=n/2,di+1=di/2,dt=1,t=log2n。后来又有人提出其他选择增量序列的方法,如后来又有人提出其他选择增量序列的方法,如di+1=(di 1)/3,dt=1,t=log3n
22、1 以及以及di+1=(di 1)/2,dt=1,t=log2n 1。12/25/202216电子工程学院电子工程学院电子工程学院电子工程学院上一页下一页回主目录3 3 选择排序选择排序(Select Sort)基基本本思思想想:每每一一趟趟在在待待排排序序的的记记录录中中选选出出关关键键字字最最小小的的记记录录,依依次次放放在在已已排排序序的的记记录录序序列列的的最最后后,直直至至全全部部记记录录排排完完为为止。止。直接选择排序和堆排序都归属于此类排序。直接选择排序和堆排序都归属于此类排序。本节主要介绍直接选择排序本节主要介绍直接选择排序。12/25/202217电子工程学院电子工程学院电子
23、工程学院电子工程学院上一页下一页回主目录直接选择排序基本思想:直接选择排序基本思想:1.第第一一趟趟排排序序是是在在无无序序区区R0Rn 1中中选选出出最最小小的的记记录录,将它与将它与R0交换;交换;2.第第二二趟趟排排序序是是在在无无序序区区R1Rn 1中中选选关关键键字字最最小小的的记记录,将它与录,将它与R1交换;交换;3.第第i趟趟排排序序时时R0Ri 2已已是是有有序序区区,在在当当前前的的无无序序区区Ri 1Rn 1中中选选出出关关键键字字最最小小的的记记录录Rk,将将它它与与无无序序区区中中第第1个个记记录录Ri 1交交换换,使使R1Ri 1变变为为新新的的有有序区。序区。因因
24、为为每每趟趟排排序序都都使使有有序序区区中中增增加加了了一一个个记记录录,且且有有序序区区中中的的记记录录关关键键字字均均不不大大于于无无序序区区中中记记录录的的关关键键字字,所所以以,进进行行n 1趟趟排排序序后后,整整个个文文件件就就是是递递增增有有序序的的。其其排排序序过过程程如如图图14.3所示。所示。12/25/202218电子工程学院电子工程学院电子工程学院电子工程学院上一页下一页回主目录直接选择排序过程直接选择排序过程12/25/202219电子工程学院电子工程学院电子工程学院电子工程学院上一页下一页回主目录直接选择排序的算法如下:直接选择排序的算法如下:SELECTSORT(r
25、ectypeR)/对对R0Rn 1进进行行直直接接选选择择排排序序inti,j,k;rectypetemp;for(i=0;in 1;i+)/进行进行n 1趟选择排序趟选择排序k=i;for(j=i+1;jn;j+)/在当前无序区选关键字最小的记录在当前无序区选关键字最小的记录Rkif(Rj.keyRk.key)/稳定性稳定性kj),则则将将两两个个记记录录交交换换位位置置。这这样样的的操操作作反反复复进进行行,直直至至全全部部记记录录都都比比较较、交交换换完完为为止止。如如此此一一趟趟排排序序后后,就就将将关关键键字字最最小小的的记记录录安安排排在在第第一一个个记录的位置上。记录的位置上。2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 10 排序

限制150内