数据结构内部排序学习教案.pptx
《数据结构内部排序学习教案.pptx》由会员分享,可在线阅读,更多相关《数据结构内部排序学习教案.pptx(87页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、会计学1数据结构数据结构(sh j ji u)内部排序内部排序第一页,共87页。2目目 录录10.1 概述概述(i sh)10.2 插入排序插入排序10.3 快速快速(kui s)排序排序10.4 选择选择(xunz)排序排序10.5 归并排序归并排序10.6 基数排序基数排序10.7 各种内部排序方法的比较讨论各种内部排序方法的比较讨论第1页/共87页第二页,共87页。3 排序排序(pi x)(sorting)1.基本概念基本概念 将一个数据元素将一个数据元素(yun s)(或记录)的任意序列,重新排列成(或记录)的任意序列,重新排列成一个按关键字有序的序列。一个按关键字有序的序列。假设含假
2、设含n个记录的序列个记录的序列(xli)为为 R1,R2,Rn ()其相应的关键字序列其相应的关键字序列(xli)为为 K1,K2,Kn 10.1 10.1 概述概述概述概述第2页/共87页第三页,共87页。4需确定需确定(qudng)1,2,n的一种排列的一种排列p1,p2,pn,使其相应,使其相应的关键字满足如下的非递减(或非递增)关系的关键字满足如下的非递减(或非递增)关系 Kp1 Kp2 Kpn即使序列即使序列()成为一个按关键字有序的序列)成为一个按关键字有序的序列 Rp1,Rp2,Rpn这种操作过程称为排序。这种操作过程称为排序。排序排序(pi x)(接上页接上页)基本概念基本概念
3、第3页/共87页第四页,共87页。5基本概念基本概念 排序排序(pi x)方法是稳定的方法是稳定的 设设 Ki=Kj(l i n,1 j n,ij),且在排序前),且在排序前的序列的序列(xli)中中 Ri领先于领先于 Rj(即(即 ij),在排序后的序列),在排序后的序列(xli)中中 Ri仍仍领先于领先于 Rj。排序方法排序方法(fngf)是不稳定的是不稳定的 设设 Ki=Kj(l i n,1 j n,ij),且在排序前),且在排序前的序列中的序列中 Ri领先于领先于 Rj(即(即 ij),在排序后的序列中),在排序后的序列中 Rj领先于领先于 Ri。第4页/共87页第五页,共87页。62
4、.排序排序(pi x)方法分方法分类类 按照文件所处的位置不同:按照文件所处的位置不同:内部内部(nib)排序排序 待排序记录存放待排序记录存放(cnfng)在计算机内存中进行的排序过程。在计算机内存中进行的排序过程。外部排序外部排序 排序过程中有内、外存间信息的传递及交换的排序过程。排序过程中有内、外存间信息的传递及交换的排序过程。第5页/共87页第六页,共87页。7排序方法排序方法(fngf)分类分类 按排序按排序(pi x)时使用的原理时使用的原理 插入排序、交换排序、选择排序、归并插入排序、交换排序、选择排序、归并(gubng)排序、基数排序、基数排序。排序。按照所需的工作量按照所需的
5、工作量简单的排序方法,其时间复杂度为简单的排序方法,其时间复杂度为O(n2););先进的排序方法,其时间复杂度为先进的排序方法,其时间复杂度为O(nlogn););基数排序,其时间复杂度为基数排序,其时间复杂度为O(d n)。)。第6页/共87页第七页,共87页。83.基本操作基本操作 比较比较(bjio)两个关键字的大小;两个关键字的大小;将记录从一个位置将记录从一个位置(wi zhi)移动至另一个位置移动至另一个位置(wi zhi)。第7页/共87页第八页,共87页。94.存储存储(cn ch)结构结构(1)以一维数组作为存储)以一维数组作为存储(cn ch)结构结构(2)以静态链表作为存
6、储)以静态链表作为存储(cn ch)结构(链表排序)结构(链表排序)(3)采用辅助表排序)采用辅助表排序(地址排序)(地址排序)待排序记录存储在数组中,同时另待排序记录存储在数组中,同时另 设一个指示各个记设一个指示各个记录存储位置的录存储位置的地址向量。地址向量。在排序过程中不移动记录本身,而在排序过程中不移动记录本身,而移动地址向量中这些记录的移动地址向量中这些记录的 “地址地址”,排序结束后再按照地,排序结束后再按照地址向量中的值调整记录的存储位置。址向量中的值调整记录的存储位置。第8页/共87页第九页,共87页。10 5.5.排序方法排序方法排序方法排序方法(fngf)(fngf)分析
7、分析分析分析n n排序的时间开销排序的时间开销排序的时间开销排序的时间开销:排序的时间开销是衡量算法好坏的最重要的排序的时间开销是衡量算法好坏的最重要的排序的时间开销是衡量算法好坏的最重要的排序的时间开销是衡量算法好坏的最重要的标志。排序的时间开销可用算法执行中的数据比较次数与数据标志。排序的时间开销可用算法执行中的数据比较次数与数据标志。排序的时间开销可用算法执行中的数据比较次数与数据标志。排序的时间开销可用算法执行中的数据比较次数与数据移动次数来衡量。移动次数来衡量。移动次数来衡量。移动次数来衡量。n n一般都按平均情况进行估算。对于一般都按平均情况进行估算。对于一般都按平均情况进行估算。
8、对于一般都按平均情况进行估算。对于(duy)(duy)那些受对象关键字序那些受对象关键字序那些受对象关键字序那些受对象关键字序列初始排列及对象个数影响较大的,需要按最好情况和最坏情列初始排列及对象个数影响较大的,需要按最好情况和最坏情列初始排列及对象个数影响较大的,需要按最好情况和最坏情列初始排列及对象个数影响较大的,需要按最好情况和最坏情况进行估算。况进行估算。况进行估算。况进行估算。n n衡量排序方法的标准衡量排序方法的标准衡量排序方法的标准衡量排序方法的标准n n排序时所需要的平均比较次数排序时所需要的平均比较次数排序时所需要的平均比较次数排序时所需要的平均比较次数n n排序时所需要的平
9、均移动排序时所需要的平均移动排序时所需要的平均移动排序时所需要的平均移动n n排序时所需要的平均辅助存储空间排序时所需要的平均辅助存储空间排序时所需要的平均辅助存储空间排序时所需要的平均辅助存储空间第9页/共87页第十页,共87页。111.直接直接(zhji)插入排序插入排序(Straight Insertion Sort)概念概念(ginin)将一个记录插入到已排好序的有序表中,从而将一个记录插入到已排好序的有序表中,从而(cng r)得到一得到一个新的、记录数增个新的、记录数增 1 的有序表。的有序表。例:已排序的一组记录排列如下:例:已排序的一组记录排列如下:12,33,45,57,76
10、现将关键字现将关键字 40 记录插入上述序列中记录插入上述序列中12,33,40,45,57,7610.2 10.2 插入排序插入排序插入排序插入排序第10页/共87页第十一页,共87页。12 算法算法(sun f)的基本思路的基本思路直接直接(zhji)插入排序插入排序 设有设有n个待排记录存放个待排记录存放(cnfng)在在r1.n中,将第中,将第i(2i n)个记录个记录插入到已排好序的有序表插入到已排好序的有序表r1.i-1中的过程为:从中的过程为:从ri-1 起往起往前搜索,若前搜索,若ri rj(1j i-1),则将,则将rj 向后移动,直至找向后移动,直至找到第到第i个记录的位置
11、。个记录的位置。第11页/共87页第十二页,共87页。13 算法算法(sun f)10.1直接直接(zhji)插入排序插入排序void InsertSort(SqList&L)for(i=2;i=L.Length;+i)if LT(L.ri.key,L.ri-1.key L.r0=L.ri;L.ri=L.ri-1;for(j=i-2;LT(L.r0.key,L.rj.key);-j)L.rj+l=L.rj;L.rj+l=L.r0;第12页/共87页第十三页,共87页。14 例子例子(l zi)直接直接(zhji)插入排序插入排序初始初始(ch sh)关键字:关键字:(42)41 33 67 7
12、4 23 37 33 i=2:(41)(41 42)33 67 74 23 37 33 i=3:(33)(33 41 42)67 74 23 37 33i=4:(33)(33 41 42 67)74 23 37 33i=5:(33)(33 41 42 67 74)23 37 33i=6:(23)(23 33 41 42 67 74)37 33 i=7:(37)(23 33 37 41 42 67 74)33 i=8:(33)(23 33 33 37 41 42 67 74)第13页/共87页第十四页,共87页。15时间时间(shjin)复杂性分析复杂性分析直接直接(zhji)插入排序插入排序n
13、 n若设待排序的对象个数为若设待排序的对象个数为若设待排序的对象个数为若设待排序的对象个数为L.length=nL.length=n,则该算法的主,则该算法的主,则该算法的主,则该算法的主程序执行程序执行程序执行程序执行n-1n-1趟。趟。趟。趟。n n关键字比较次数和对象移动次数与对象关键字的初始关键字比较次数和对象移动次数与对象关键字的初始关键字比较次数和对象移动次数与对象关键字的初始关键字比较次数和对象移动次数与对象关键字的初始排列有关。排列有关。排列有关。排列有关。n n最好情况最好情况最好情况最好情况(qngkung)(qngkung)下,排序前对象已经按关键字下,排序前对象已经按关
14、键字下,排序前对象已经按关键字下,排序前对象已经按关键字大小从小到大有序,每趟只需与前面的有序对象序列大小从小到大有序,每趟只需与前面的有序对象序列大小从小到大有序,每趟只需与前面的有序对象序列大小从小到大有序,每趟只需与前面的有序对象序列的最后一个对象的关键字比较的最后一个对象的关键字比较的最后一个对象的关键字比较的最后一个对象的关键字比较 1 1 次,总的关键字比较次,总的关键字比较次,总的关键字比较次,总的关键字比较次数为次数为次数为次数为 n-1 n-1,对象移动次数为,对象移动次数为,对象移动次数为,对象移动次数为 0 0。n n最坏情况最坏情况最坏情况最坏情况(qngkung)(q
15、ngkung)下,排序前对象已经按关键字下,排序前对象已经按关键字下,排序前对象已经按关键字下,排序前对象已经按关键字大小从大到小有序(逆序),需比较和移动次数为多大小从大到小有序(逆序),需比较和移动次数为多大小从大到小有序(逆序),需比较和移动次数为多大小从大到小有序(逆序),需比较和移动次数为多少?少?少?少?第14页/共87页第十五页,共87页。16 直接直接直接直接(zhji)(zhji)插入排序插入排序插入排序插入排序时间时间(shjin)复杂性分析复杂性分析n n若待排序对象序列中出现各种可能排列若待排序对象序列中出现各种可能排列若待排序对象序列中出现各种可能排列若待排序对象序列
16、中出现各种可能排列(pili)(pili)的概率相同,则可取上述最好情况和的概率相同,则可取上述最好情况和的概率相同,则可取上述最好情况和的概率相同,则可取上述最好情况和最坏情况的平均情况。在平均情况下的关键字最坏情况的平均情况。在平均情况下的关键字最坏情况的平均情况。在平均情况下的关键字最坏情况的平均情况。在平均情况下的关键字比较次数和对象移动次数约为比较次数和对象移动次数约为比较次数和对象移动次数约为比较次数和对象移动次数约为 n2/4 n2/4。因此,直。因此,直。因此,直。因此,直接插入排序的时间复杂度为接插入排序的时间复杂度为接插入排序的时间复杂度为接插入排序的时间复杂度为 o(n2
17、)o(n2)。n n直接插入排序是一种稳定的排序方法。直接插入排序是一种稳定的排序方法。直接插入排序是一种稳定的排序方法。直接插入排序是一种稳定的排序方法。第15页/共87页第十六页,共87页。172.其它其它(qt)插入排序插入排序 折半插入排序(折半插入排序(Binary Insertion Sort)折半插入排序基本思想是:设在顺序表中有一折半插入排序基本思想是:设在顺序表中有一 个个对象序列对象序列 V0,V1,vn-1。其中,。其中,v0,V1,vi-1 是已经排好序的对象。在插入是已经排好序的对象。在插入 vi 时,利时,利用折半搜索法寻找用折半搜索法寻找(xnzho)vi 的插入
18、位置。的插入位置。2-路插入排序路插入排序 表插入排序表插入排序第16页/共87页第十七页,共87页。18n n折半插入排序的算法折半插入排序的算法折半插入排序的算法折半插入排序的算法10.210.2n nvoid BInsertSort(SqList&L)void BInsertSort(SqList&L)n n int low,high,mid;int low,high,mid;n n for(int i=2;i=L.length;+i)for(int i=2;i=L.length;+i)n n L.r0=L.ri;L.r0=L.ri;n n low=1;high=i-1;low=1;hi
19、gh=i-1;n n while(low=high)while(low=high+1;-j)L.rj+1=L.rj;for(int j=i-1;j=high+1;-j)L.rj+1=L.rj;n n L.rhigh+1=L.r0;L.rhigh+1=L.r0;n n n n n n说明:说明:说明:说明:low low 或者或者或者或者 high+1 high+1为插入点为插入点为插入点为插入点 稳定稳定稳定稳定(wndng)(wndng)排序排序排序排序第17页/共87页第十八页,共87页。19n n算法算法算法算法(sun f)(sun f)分析分析分析分析折半查找比顺序查找快,所以折半插
20、入排序就平均性能来说比直接插入排序要快。折半查找比顺序查找快,所以折半插入排序就平均性能来说比直接插入排序要快。折半查找比顺序查找快,所以折半插入排序就平均性能来说比直接插入排序要快。折半查找比顺序查找快,所以折半插入排序就平均性能来说比直接插入排序要快。它所需要的关键字比较次数与待排序对象序列的初始排列无关,仅依赖于对象个数。在插入第它所需要的关键字比较次数与待排序对象序列的初始排列无关,仅依赖于对象个数。在插入第它所需要的关键字比较次数与待排序对象序列的初始排列无关,仅依赖于对象个数。在插入第它所需要的关键字比较次数与待排序对象序列的初始排列无关,仅依赖于对象个数。在插入第 i i 个对象
21、时,需要经过个对象时,需要经过个对象时,需要经过个对象时,需要经过 log2ilog2i +1 +1 次关键字比较,才能次关键字比较,才能次关键字比较,才能次关键字比较,才能(cinng)(cinng)确定它应插入的位置。因此,将确定它应插入的位置。因此,将确定它应插入的位置。因此,将确定它应插入的位置。因此,将 n n 个对象(为推导方便,设为个对象(为推导方便,设为个对象(为推导方便,设为个对象(为推导方便,设为 n=2k)n=2k)用折半插入排序所进行的关键字比较次数为:用折半插入排序所进行的关键字比较次数为:用折半插入排序所进行的关键字比较次数为:用折半插入排序所进行的关键字比较次数为
22、:第18页/共87页第十九页,共87页。20第19页/共87页第二十页,共87页。21n n当当当当 n n 较较较较大大大大时时时时,总总总总关关关关键键键键字字字字比比比比较较较较次次次次数数数数比比比比直直直直接接接接插插插插入入入入排排排排序序序序的的的的最最最最坏坏坏坏情情情情况况况况要要要要好得多,但比其最好情况要差。好得多,但比其最好情况要差。好得多,但比其最好情况要差。好得多,但比其最好情况要差。n n在在在在对对对对象象象象的的的的初初初初始始始始(ch(ch sh)sh)排排排排列列列列已已已已经经经经按按按按关关关关键键键键字字字字排排排排好好好好序序序序或或或或接接接接
23、近近近近有有有有序序序序时时时时,直直直直接接接接插插插插入入入入排排排排序序序序比比比比折折折折半半半半插插插插入入入入排排排排序序序序执执执执行行行行的的的的关关关关键键键键字字字字比比比比较较较较次次次次数数数数要要要要少少少少。折折折折半半半半插插插插入入入入排排排排序序序序的的的的对对对对象象象象移移移移动动动动次次次次数数数数与与与与直直直直接接接接插插插插入入入入排排排排序序序序相相相相同同同同,依依依依赖赖赖赖于于于于对对对对象象象象的初始的初始的初始的初始(ch sh)(ch sh)排列。排列。排列。排列。n n折半插入排序是一个稳定的排序方法。折半插入排序是一个稳定的排序方
24、法。折半插入排序是一个稳定的排序方法。折半插入排序是一个稳定的排序方法。第20页/共87页第二十一页,共87页。223.希尔排序希尔排序(pi x)(Shells Sort)基本基本(jbn)(jbn)思想思想 先将整个待排记录序列分割成为若干先将整个待排记录序列分割成为若干(rugn)子序列分别进行子序列分别进行直接插入排序,待整个序列中的记录直接插入排序,待整个序列中的记录“基本有序基本有序”时,再对时,再对全体记录进行一次直接插入排序。全体记录进行一次直接插入排序。概念概念 希尔排序又称希尔排序又称“缩小增量排序缩小增量排序”(Diminishing Increment Sort)属于插
25、入排序类的方法,其时间效率上优于前述几种方法。属于插入排序类的方法,其时间效率上优于前述几种方法。第21页/共87页第二十二页,共87页。23例,初始例,初始(ch sh)关键字序列为:关键字序列为:43 41 33 67 74 23 37 33 47 35d=5 43 2341 3733 3367 4774 35一趟排序一趟排序(pi x)的结果:的结果:23 37 33 47 35 43 41 33 67 74希尔排序希尔排序(pi x)例子例子第22页/共87页第二十三页,共87页。24 23 37 33 47 35 43 41 33 67 74d=3 23 47 41 7437 35
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 内部 排序 学习 教案
限制150内