数据结构课件第十章内部排序.ppt
《数据结构课件第十章内部排序.ppt》由会员分享,可在线阅读,更多相关《数据结构课件第十章内部排序.ppt(54页珍藏版)》请在三一办公上搜索。
1、数据结构-第十章 内部排序,1,第十章 内部排序,10.1 概述10.2 插入排序10.3 交换排序10.4 选择排序10.5 归并排序10.6 基数排序10.7 各种内部排序方法比较本章学习要点 习题与上机作业,数据结构-第十章 内部排序,2,10.1 概述,10.1.1 什么是排序 其目的是将一组“无序”的记录序列调整为“有序”的记录序列,是根据记录关键字的值的非递减或者非递增(递增或者递减)的关系将文件记录的次序重新排列。,例 将下列关键字序列:52,49,80,36,14,58,61,23,97,75 调整为:14,23,36,49,52,58,61,75,80,97,数据结构-第十章
2、 内部排序,3,10.1.2 排序的分类,根据排序时文件记录的存放位置 内部排序:排序过程中将全部记录放在内存中处理。外部排序:排序过程中需在内外存之间交换信息。根据排序前后相同关键字记录的相对次序 稳定排序:设文件中任意两个记录的关键字值相同,即Ki=Kj(ij),若排序之前记录Ri领先于记录Rj,排序后这种关系不变(对所有输入实例而言)。不稳定排序:只要有一个实例使排序算法不满足稳定性要求。,数据结构-第十章 内部排序,4,根据文件的存储结构划分排序的种类 顺序存储 链式存储 地址存储:待排记录顺序存储,排序时只对辅助 表(关键字+指针)的表目进行物理重排。根据内部排序的方法 插入排序 交
3、换排序 选择排序 归并排序 基数排序根据排序算法所需的辅助空间 就地排序:O(1)非就地排序:O(n)或与n有关,数据结构-第十章 内部排序,5,内部排序的过程是一个逐步扩大记录的有序序列长度的过程。,内部排序方法基于不同的“扩大”有序序列长度的方法。,数据结构-第十章 内部排序,6,10.1.3 评价排序算法的主要标准,时间开销 考察算法的两个基本操作的次数:比较关键字移动记录 算法时间还与输入实例的初始状态有关时,分情况:最好最坏平均空间开销 所需的辅助空间,数据结构-第十章 内部排序,7,讨论约定(1)顺序存储(2)按记录关键字非递减,关键字为整数,#define MAXSIZE 20t
4、ypedef int KeyType;typedef struct KeyType key;InfoType otherinfo;RedType;typedef structRedType rMAXSIZE+1;/r0闲置或作哨兵int length;SqList;,0 1 2 L.length MAXSIZE,SqList L;,L.r,数据结构-第十章 内部排序,8,10.2 插入排序,有序序列R1.i-1,Ri,无序序列 Ri.n,一趟直接插入排序的基本思想:,有序序列R1.i,无序序列 Ri+1.n,不同的具体实现方法导致不同的算法描述:直接插入排序(基于顺序查找)折半插入排序(基于折
5、半查找)表插入排序(基于链表存储)希尔排序(基于逐趟缩小增量),数据结构-第十章 内部排序,9,10.2.1 直接插入排序(增量法)利用“顺序查找”实现“在R1.i-1中查找Ri的插入位置”示例 R(0)R(-4)R(8)R(1)R(-4)R(-6)n=6 i=1 0-4 8 1-4-6 i=2-4 0 8 1-4-6 i=3-4 0 8 1-4-6 i=4-4 0 1 8-4-6 i=5-4-4 0 1 8-6 i=6-6-4-4 0 1 8 算法思想 每次使有序区增加一个记录,稳定排序,数据结构-第十章 内部排序,10,算法步骤,0 1 i-1 i i+1 nr0.n ri(有序区)(无序
6、区)循环(n-1)次,初值 i=21)若riri-1,则把第i个记录取出保存在r0中,j=i-1 2)若r0 rj,则rj后移一位,j=j-1,转2);否则r0放在rj+1处,i=i+1,转1)算法描述,void InsertSort(SqList/InsertSort,数据结构-第十章 内部排序,11,哨兵/监视哨的作用,简化边界条件的测试,提高算法时间效率。性能分析最好情况(原始数据按正序即非递减序排列)Cmin=Mmin=0最坏情况(原始数据按逆序即非递增序排列)Cmax=Mmax=随机情况 Cavg=(Cmin+Cmax)/2n2/4 Mavg n2/4时间复杂度O(n2)辅助空间复杂
7、度O(1),数据结构-第十章 内部排序,12,改进措施,折半插入排序 算法思想:将循环中每一次在区间 1,i-1 上为确定插入位置的顺序查找操作改为折半查找操作。效果:减少关键字间的比较次数。2-路插入排序 算法思想:设置与r同样大小的辅助空间d,将r1赋值给d1,将d看作循环向量。对于ri(2in),若rid1,则插入d1之后的有序序列中,反之则插入d1之前的有序序列中。(避免r1关键字最小/最大)效果:减少记录的移动次数。表插入排序 算法思想:构造静态链表,用改变指针来代替移动记录操作 效果:减少记录的移动次数。,d,r1,数据结构-第十章 内部排序,13,10.2.2 希尔排序(渐减/缩
8、小增量排序),算法思想的出发点直接插入排序在待排序列的关键字基本有序时,效率较高在待排序的记录个数较少时,效率较高算法思想 先选定一个记录下标的增量d,将整个记录序列按增量d从第一个记录开始划分为若干组,对每组使用直接插入排序的方法;然后减小增量d,不断重复上述过程,如此下去,直到d=1(此时整个序列是一组)。,对待排记录序列先作“宏观”调整,再作“微观”调整。,数据结构-第十章 内部排序,14,示例,46 82 52 40 67 31 40 73 53 76 d1=5 31 46 40 82 52 73 40 53 67 76,不稳定排序,31 40 52 40 67 46 82 73 53
9、 76,d2=3 31 40 76 82 40 67 73 46 52 53,31 40 46 40 67 52 76 73 53 82,d3=1 31 40 40 46 52 53 67 73 76 82,数据结构-第十章 内部排序,15,void ShellSort(SqList/ShellSort,算法描述,数据结构-第十章 内部排序,16,性能分析,时间复杂度是n和d的函数如何选择最佳d序列,目前尚未解决最后一个增量值必须为1避免增量序列中的值(尤其是相邻的值)有公因子实验结果:当n较大时,比较和移动次数约在n1.25到1.6n1.25。就地排序,数据结构-第十章 内部排序,17,10
10、.3 交换排序,10.3.1 起泡排序(冒泡排序)算法思想 将两个相邻记录的关键字进行比较,若为逆序则交换两者位置,小者往上浮,大者往下沉。算法步骤 记录1和2、2和3、(n-1)和n的关键字比较(交换);记录1和2、2和3、(n-2)和(n-1)的关键字比较(交换);直到某一趟不出现交换操作为止。,数据结构-第十章 内部排序,18,示例,0-4-4-6-6-4 0-6-4-4 8-6-4-4-4-6-4 0 0 0-4 1 1 1 1 1 8 8 8 8 sorted F F F T,稳定排序,数据结构-第十章 内部排序,19,void BubbleSort(SqList/BubbleSor
11、t,算法描述,数据结构-第十章 内部排序,20,性能分析,最好情况(原始数据按正序即非递减序排列)Cmin=n-1 Mmin=0最坏情况(原始数据按逆序即非递增序排列)Cmax=Mmax=时间复杂度O(n2)辅助空间复杂度O(1)算法的改进每趟排序中,记录最后一次发生交换的位置双向交替扫描,下上,最轻升顶;上下,最重沉底,数据结构-第十章 内部排序,21,10.3.2 快速排序(分划交换排序/分治法),分治算法原理1)分解:将原问题分解为若干子问题2)求解:递归地解各子问题,若子问题的规模足够小,则直接求解3)组合:将各子问题的解组合成原问题的解快速排序算法思想 指定枢轴/支点/基准记录rp(
12、通常为第一个记录),通过一趟排序将其放在正确的位置上,它把待排记录分割为独立的两部分,使得 左边记录的关键字 rp.key 右边记录的关键字 对左右两部分记录序列重复上述过程,依次类推,直到子序列中只剩下一个记录或不含记录为止。(可以用递归方法实现),数据结构-第十章 内部排序,22,一趟快速排序示例,(49)38 65 97 76 13 27 49 i j 27 38 65 97 76 13()49 i j 27 38()97 76 13 65 49 i j 27 38 13 97 76()65 49 i j 27 38 13()76 97 65 49 i j 27 38 13 49 76
13、97 65 49,(i=j),0 1 2 3 4 5 6 7 8,49,数据结构-第十章 内部排序,23,算法描述,void QuickSort(SqList/QuickSort,void QSort(SqList Qsort(L,pivotloc+1,high)/QSort,数据结构-第十章 内部排序,24,算法描述(续),int Partition(SqList/Partition,数据结构-第十章 内部排序,25,性能分析,最坏情况(原始数据正/逆序排列)Cmax=(n-1)+(n-2)+1=n(n-1)/2 Mmax Cmin O(n2)最好情况:每次划分的结果是基准的左、右两个无序子
14、区间的长度大致相等 Cmin O(nlgn)Mmin Cmin O(nlog2n)平均时间性能 Tavg(n)=kn ln(n)k:某个常数;n:待排序序列中记录个数 就平均时间而言,快速排序是目前被认为最好的一种内部排序方法。辅助空间复杂度 最好情况 O(log2 n)最坏情况 O(n),L,L/2,L/2,L,1,1,1,数据结构-第十章 内部排序,26,算法的改进 合理选择枢轴记录可改善性能。例如,三者取中随机产生算法的稳定性 是非稳定排序 反例 2,2,1:1 2 2,思考:在链表存储结构上如何实现快速排序?,数据结构-第十章 内部排序,27,10.4 选择排序,10.4.1 简单选择
15、排序(直接选择排序)算法思想 每次从待排序列中选出关键字最小记录作为有序序列中最后一个记录,直至最后一个记录为止。示例(n=8),49 38 65 97 76 49 13 27 13 38 65 97 76 49 49 27 13 27 65 97 76 49 49 38 13 27 38 97 76 49 49 65 13 27 38 49 76 97 49 65 13 27 38 49 49 97 76 65 13 27 38 49 49 65 76 97 13 27 38 49 49 65 76 97(每趟排序使有序区增加一个记录),不稳定排序,数据结构-第十章 内部排序,28,算法描述
16、,void SelectSort(SqList/SelectSort,性能分析总的比较次数与记录排列的初始状态无关 C=(n-1)+(n-2)+.+2+1=n(n-1)/2移动次数 初始记录逆序时:Mmax=3(n-1)初始记录正序时:Mmin=0平均时间复杂度O(n2)辅助空间复杂度O(1),简单选择排序记录移动次数少,数据结构-第十章 内部排序,29,10.4.2 树形选择排序(锦标赛排序),算法思想 锦标赛名次产生过程。较简单选择排序减少“比较”次数。示例 23 23 40 38 23 40 46 38 23 38 40 性能 除第一次外,每次都走了树的一条分支,故其时间复杂度为 O(n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课件 第十 内部 排序

链接地址:https://www.31ppt.com/p-5986085.html