数据结构第六章排序资料.ppt
《数据结构第六章排序资料.ppt》由会员分享,可在线阅读,更多相关《数据结构第六章排序资料.ppt(73页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构第六章排序徐晓晖制p基本概念基本概念p插入排序插入排序p交换排序交换排序p选择排序选择排序p归并排序归并排序p基数排序基数排序p外部排序外部排序数据结构第六章排序徐晓晖制10-1 排序的基本概念排序的基本概念是记录中的一个(或多个)字段,如果是关键码,则按关键码排序;排序码也可以不是关键码,则可能有多个记录具有相同的排序码,排序的结果不惟一。将一个数据元素集合或序列重新排列成一个按数据元素某个数据项值有序的序列。l排序排序l排序码排序码l稳定排序稳定排序l不稳定排序不稳定排序l内排序内排序l外排序外排序假设R0,R1,Rn-1是由n个记录组成的文件,K0,K1,Kn-1是排序码集合,假
2、设Ki=Kj(0=i,j=n-1,ij),且在排序前的序列中Ri领先于Rj(即ij),若在排序后的序列中Ri仍领先于Rj,则称所用的排序方法是稳定的稳定的,否则是不稳定的不稳定的。待排序的记录在排序过程中全部存放在内存的称为内排序内排序,如果排序过程中需要使用外存的称为外排序外排序。数据结构第六章排序徐晓晖制排序方法可以分为五种:插入排序、选择排序、插入排序、选择排序、交换排序、基数排序和归并排序交换排序、基数排序和归并排序。排序中的基本操作:比较比较关键码大小和移动移动记录。评价排序算法好坏的标准主要有两条执行算法所需的时间;执行算法所需要的附加空间。排序的时间开销可以用算法执行中的比较比较
3、和移动移动次数来表示。数据结构第六章排序徐晓晖制10-2插入排序插入排序插入排序插入排序插入排序的基本思想:每步将一个待排序的记录按其的基本思想:每步将一个待排序的记录按其关键字大小插入到前面已排序表中的适当位置,直到关键字大小插入到前面已排序表中的适当位置,直到全部插入完为止。全部插入完为止。u直接插入排序直接插入排序假设待排序的假设待排序的n n个记录个记录R0,R1,Rn-1R0,R1,Rn-1存放在数组中,存放在数组中,直接插入法直接插入法直接插入法直接插入法是在插入记录在插入记录Ri(iRi(i=1,2n-1)=1,2n-1)时,记录集合时,记录集合被划分为两个区间被划分为两个区间R
4、0R0,Ri-1Ri-1和和 RiRi,Rn-1Rn-1,其中,其中,前一个子区间已经排好序,后一个子区间是当前未前一个子区间已经排好序,后一个子区间是当前未排序的部分,将排序码排序的部分,将排序码KiKi与与Ki-1Ki-1,Ki-2,K0Ki-2,K0依次比依次比较,找出应该插入的位置,将记录较,找出应该插入的位置,将记录RiRi插入,原位置插入,原位置的记录向后顺移。的记录向后顺移。数据结构第六章排序徐晓晖制例:设待排序记录的排序码为:49,38,65,97,76,13,27,49,请用直接插入排法排序。i=2:4938659776132749i=3:3849659776132749i=
5、4:3849659776132749i=5:3849659776132749i=6:3849657697132749i=7:1338496576972749i=8:1327384965769749i=9:1327384949657697数据结构第六章排序徐晓晖制typedeftypedef structstruct KeyTypeKeyTypekeykey;DataTypeDataType;voidInsertSort(DataTypeR,intn)intI;for(i=2;i=n;i+)if(Ri.keyRi-1.key)R0=Ri;for(j=i-1;R0.deyRj.key;j-)Rj+
6、1=Rj;Rj+1=R0;数据结构第六章排序徐晓晖制算法分析如下:空间效率:只需要一个记录的辅助空间。时间效率:最小比较记录的次数为n-1=O(n);最大比较记录的次数为(n+2)(n-1)/2=O(n2);最小移动记录的次数为0次;最大移动记录的次数为(n+4)(n-1)/2=O(n2)。平均情况下,插入记录大约同前面i/2个记录进行关键码比较和移动,因此插入排序的时间复杂度为O(n2)直接插入排序是稳定的排序算法数据结构第六章排序徐晓晖制u二分法插入排序二分法插入排序由于插入排序的基本操作是在有序表中进行查找,而查找的过程是可以用折半查找来实现的。由此实现的排序称为二分法插入排序二分法插入
7、排序。二分法插入排序必须采用顺序存储方式。数据结构第六章排序徐晓晖制voidB_InsertSort(DataTypeR,intn)intI;intcow,high,mid;for(i=2;i=n;i+)R0=Ri;low=1;high=i-1;while(lowRmid.key)low=mid+1;elsehigh=mid-1;for(j=i-1;j=high+1;j-)Rj+1=Rj;Rhigh+1=R0;数据结构第六章排序徐晓晖制i=2:4938659776132749i=3:3849659776132749i=4:3849659776132749i=5:3849659776132749
8、i=6:3849657697132749i=7:1338496576972749i=8:1327384965769749i=9:1327384949657697low=1,high=1low=1,high=2low=1,high=3low=1,high=4low=1,high=5数据结构第六章排序徐晓晖制算法分析如下:定位一个关键码的位置需比较次数至多为,比较次数时间复杂度为而移动记录的次数和直接插入排序相同,因此时间复杂度仍为O(n2)二分插入排序是一个稳定的排序方法。数据结构第六章排序徐晓晖制u表插入排序基本思想:在直接插入的基础上减少移动次数,主要是在记录中设置一个指针字段,记录链接成链
9、表,初始时,链表为空,头结点指针域置为0,并在头结点数据域放比所有记录关键码都大的整数,然后,向链表中插入结点typedefstructDataTypedata;intnext;NodeType;NodeTypeRn+1;数据结构第六章排序徐晓晖制MAX49386597761327490-0112030445262738这个有序的链表,查找则只能顺序查找,而不能随机查找若需要,要发对记录进行重排,使其在物理上有序。012345678数据结构第六章排序徐晓晖制voidB_InsertSort(NodeTypeR,intn)inti,j,p;DataTypeS;j=R0.next;i=1;whil
10、e(in)if(i=j)j=Rj.next;i+;elseif(ij)p=Rj.next;S=Ri;Ri=Rj;Rj=S;Ri.next=j;j=p;elsewhile(ji)j=Rj.next;数据结构第六章排序徐晓晖制012345678MAX4938659776132749681504723jip134986jip27381jij7p387655jij496970pjip497648jijp659770jijp769708ij数据结构第六章排序徐晓晖制u希尔排序Shell排序排序又称缩小增量排序,排序的基本思想是先取d1n,将整个待排记录分成d1个组,所有距离为d1倍数的记录放在同一组中,
11、先在各组进行直接插入排序;然后,取d2d1重复上述分组和排序工作;直到di=1为止,就可以完成整个的排序工作。Shell排序的一个特点是:子序列的构成不是简单“逐段分割”,而是将相隔某个增量的记录组成一个子序列。di有各种取法,Shell取D.Knuth取数据结构第六章排序徐晓晖制49386597761327495504初始:d1=10/2=54913 2738496555970476一趟排序后:1327495504493865977604273855二趟排序后:13044938274955659776041338494938279776希尔排序是个不稳定的排序方法数据结构第六章排序徐晓晖制v
12、oidShellInsert(DataTypeR,intdk)inti;for(i=dk+1;i=n;i+)if(Ri.key0&R0.keyRj.key;j=j-dk)Rj+dk=Rj;Rj+dk=R0;void ShellSort(DataType R,int n,int d,int t)int k;for(k=0;kt;k+)ShellInsert(R,dk);数据结构第六章排序徐晓晖制10-3交换排序交换排序交换排序的基本方法是两两比较待排序记录的排序码,交换不满足顺序要求的偶对,直到全部满足为止。冒泡排序冒泡排序的方法是先将序列中的第一个记录R0与第二个记录R1比较,若前者大于后者,
13、则两个记录交换位置,否则不交换;然后,对新的第二个记录R1与第三个记录R2做同样的处理;依次类推,直到处理完第n-1个记录和第n个记录,从(R0,R1)到(Rn-2,Rn-1)的n-1次比较和交换过程称为一次起泡。重复这样起泡过程最多n-1次就能完成排序.u冒泡排序冒泡排序数据结构第六章排序徐晓晖制voidBubble_Sort(DataTypeR,intn)inti,j,swap;for(i=1;in;i+)swap=0;for(j=1;jRj+1.key)R0=Rj;Rj=Rj+1;Rj+1=R0;swap=1;if(swap=0)break;数据结构第六章排序徐晓晖制1304493827
14、49556597760413384927497697041338274949556576972738最好情况下:移动次数为0,比较次数为n-1最差情况下:比较次数稳定的排序方法数据结构第六章排序徐晓晖制u快速排序快速排序快速排序快速排序基本思想是:通过一趟排序将待排记录分割基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。进行排序,以达到整个序列有序。一趟快速排序的具体做法是:附设两个指针i和j
15、,它们的初值分别是一个序列的第一个和最后一个记录的位置,设枢轴记录的关键字为temp.key,在首先从j所指位置起向前搜索直到第一个关键字小于temp.key的记录和i记录交换,然后从i所指位置起向后搜索,找到第一个关键字大于temp.key的记录和j记录互相交换,重复交替这两步直到i=j为止。数据结构第六章排序徐晓晖制491438749665849552749ij27iii74jjj8i96jj492714388496596495574ij278ii38j278142738496596495574ij65j55i96j49i658142738495549659674数据结构第六章排序徐晓晖制
16、intPartition(DataTypeR,inti,intj)R0=Ri;while(ij)while(i=R0.key)j-;if(ij)Ri=Rj;i+;while(ij&Ri.keyR0.key)i+;if(ij)Rj=Ri;j-;Ri=R0;returni;数据结构第六章排序徐晓晖制voidQuick_Sort(DataTypeR,ints,intt)if(st)i=Partition(R,s,t);Quick_Sort(R,s,i-1);Quick_Sort(R,i+1,t);voidQuick(DataTypeR,intn)Quick_Sort(R,1,n);数据结构第六章排序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第六 排序 资料
限制150内