数据结构内部排序.pptx
《数据结构内部排序.pptx》由会员分享,可在线阅读,更多相关《数据结构内部排序.pptx(87页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1目 录10.1 概述10.2 插入排序10.3 快速排序10.4 选择排序10.5 归并排序10.6 基数排序10.7 各种内部排序方法的比较讨论第1页/共87页2 排序(排序(sorting)1.基本概念 将一个数据元素(或记录)的任意序列,重新排列成将一个数据元素(或记录)的任意序列,重新排列成一个按关键字一个按关键字有序有序的序列。的序列。假设含假设含n个记录的序列为个记录的序列为 R1,R2,Rn ()其相应的关键字序列为其相应的关键字序列为 K1,K2,Kn 10.1 概述第2页/共87页3需确定需确定1,2,n的一种排列的一种排列p1,p2,pn,使其相应,使其相应的关键字满足如
2、下的非递减(或非递增)关系的关键字满足如下的非递减(或非递增)关系 Kp1 Kp2 Kpn即使序列即使序列()成为一个按关键字有序的序列)成为一个按关键字有序的序列 Rp1,Rp2,Rpn这种操作过程称为排序。这种操作过程称为排序。排序排序(接上页接上页)基本概念第3页/共87页4基本概念 排序方法是稳定的排序方法是稳定的 设设 Ki=Kj(l i n,1 j n,ij),且在排序),且在排序前前的序列中的序列中 Ri领先于领先于 Rj(即(即 ij),在排序),在排序后后的序列中的序列中 Ri仍仍领先于领先于 Rj。排序方法是不稳定的排序方法是不稳定的 设设 Ki=Kj(l i n,1 j
3、n,ij),且在排序前),且在排序前的序列中的序列中 Ri领先于领先于 Rj(即(即 ij),在排序后的序列中),在排序后的序列中 Rj领先于领先于 Ri。第4页/共87页52.排序方法分类 按照文件所处的位置不同:按照文件所处的位置不同:内部排序内部排序 待排序记录存放在计算机待排序记录存放在计算机内存内存中进行的排序过程。中进行的排序过程。外部排序外部排序 排序过程中有内、外存间信息的传递及交换的排序过程。排序过程中有内、外存间信息的传递及交换的排序过程。第5页/共87页6排序方法分类 按排序时使用的原理按排序时使用的原理 插入排序、交换排序、选择排序、归并排序、基数插入排序、交换排序、选
4、择排序、归并排序、基数排序。排序。按照所需的工作量按照所需的工作量简单的排序方法,其时间复杂度为简单的排序方法,其时间复杂度为O(n2););先进的排序方法,其时间复杂度为先进的排序方法,其时间复杂度为O(nlogn););基数排序,其时间复杂度为基数排序,其时间复杂度为O(d n)。)。第6页/共87页73.基本操作 比较比较两个关键字的大小;两个关键字的大小;将记录从一个位置将记录从一个位置移动移动至另一个位置。至另一个位置。第7页/共87页84.存储结构(1)以一维数组作为存储结构)以一维数组作为存储结构(2)以静态链表作为存储结构)以静态链表作为存储结构(链表排序)(链表排序)(3)采
5、用辅助表排序)采用辅助表排序(地址排序)(地址排序)待排序记录存储在数组中,同时另待排序记录存储在数组中,同时另 设一个指示各个记设一个指示各个记录存储位置的录存储位置的地址向量。地址向量。在排序过程中不移动记录本身,而在排序过程中不移动记录本身,而移动地址向量中这些记录的移动地址向量中这些记录的 “地址地址”,排序结束后再按照地,排序结束后再按照地址向量中的值调整记录的存储位置。址向量中的值调整记录的存储位置。第8页/共87页9 5.排序方法分析 排序的时间开销排序的时间开销排序的时间开销排序的时间开销:排序的时间开销是衡量算法好坏排序的时间开销是衡量算法好坏排序的时间开销是衡量算法好坏排序
6、的时间开销是衡量算法好坏的最重要的标志。排序的时间开销可用算法执行中的最重要的标志。排序的时间开销可用算法执行中的最重要的标志。排序的时间开销可用算法执行中的最重要的标志。排序的时间开销可用算法执行中的的的的数据比较次数数据比较次数数据比较次数数据比较次数与与与与数据移动次数数据移动次数数据移动次数数据移动次数来衡量。来衡量。来衡量。来衡量。一般都一般都一般都一般都按平均情况按平均情况按平均情况按平均情况进行估算。对于那些受对象关键进行估算。对于那些受对象关键进行估算。对于那些受对象关键进行估算。对于那些受对象关键字序列初始排列及对象个数影响较大的,需要字序列初始排列及对象个数影响较大的,需要
7、字序列初始排列及对象个数影响较大的,需要字序列初始排列及对象个数影响较大的,需要按最按最按最按最好情况好情况好情况好情况和和和和最坏情况最坏情况最坏情况最坏情况进行估算。进行估算。进行估算。进行估算。衡量排序方法的标准衡量排序方法的标准衡量排序方法的标准衡量排序方法的标准 排序时所需要的平均比较次数排序时所需要的平均比较次数 排序时所需要的平均移动排序时所需要的平均移动 排序时所需要的平均辅助存储空间排序时所需要的平均辅助存储空间第9页/共87页101.直接插入排序(Straight Insertion Sort)概念概念 将一个记录插入到已排好序的有序表中,从而得到一将一个记录插入到已排好序
8、的有序表中,从而得到一个新的、记录数增个新的、记录数增 1 的有序表。的有序表。例:已排序的一组记录排列如下:例:已排序的一组记录排列如下:12,33,45,57,76现将关键字现将关键字 40 记录插入上述序列中记录插入上述序列中12,33,40,45,57,7610.2 插入排序第10页/共87页11 算法的基本思路算法的基本思路直接插入排序 设有设有n个待排记录存放在个待排记录存放在r1.n中,将第中,将第i(2i n)个记录个记录插入到已排好序的有序表插入到已排好序的有序表r1.i-1中的过程为:从中的过程为:从ri-1 起往起往前搜索,若前搜索,若ri rj(1j i-1),则将,则
9、将rj 向后移动,直至找向后移动,直至找到第到第i个记录的位置。个记录的位置。第11页/共87页12 算法算法10.1直接插入排序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页13 例子例子直接插入排序初始关键字:初始关键字:(42)41 33 67 74 23 37 33 i=2:(41)(41 42)33 67 7
10、4 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页14时间复杂性分析时间复杂性分析直接插入排序若设待排序的对象个数为若设待排序的对象个数为L.lengthL.length=n n,则该,则该算法的主程序执行算法的主程序执
11、行n n-1-1趟。趟。关键字比较次数和对象移动次数与对象关键字关键字比较次数和对象移动次数与对象关键字的初始排列有关。的初始排列有关。最好情况下,排序前对象已经按关键字大小从最好情况下,排序前对象已经按关键字大小从小到大有序,每趟只需与前面的有序对象序列小到大有序,每趟只需与前面的有序对象序列的最后一个对象的关键字比较的最后一个对象的关键字比较 1 1 次,总的关键次,总的关键字比较次数为字比较次数为 n n-1-1,对象移动次数为,对象移动次数为 0 0。最坏情况下,排序前对象已经按关键字大小从最坏情况下,排序前对象已经按关键字大小从大到小有序(逆序),需比较和移动次数为多大到小有序(逆序
12、),需比较和移动次数为多少?少?第14页/共87页15 直接插入排序时间复杂性分析时间复杂性分析若待排序对象序列中出现各种可能排列的概若待排序对象序列中出现各种可能排列的概若待排序对象序列中出现各种可能排列的概若待排序对象序列中出现各种可能排列的概率相同,则可取上述最好情况和最坏情况的率相同,则可取上述最好情况和最坏情况的率相同,则可取上述最好情况和最坏情况的率相同,则可取上述最好情况和最坏情况的平均情况。在平均情况下的关键字比较次数平均情况。在平均情况下的关键字比较次数平均情况。在平均情况下的关键字比较次数平均情况。在平均情况下的关键字比较次数和对象移动次数约为和对象移动次数约为和对象移动次
13、数约为和对象移动次数约为 n n2 2/4/4。因此,直接插入。因此,直接插入。因此,直接插入。因此,直接插入排序的时间复杂度为排序的时间复杂度为排序的时间复杂度为排序的时间复杂度为 o(o(n n2 2)。直接插入排序是一种直接插入排序是一种直接插入排序是一种直接插入排序是一种稳定稳定稳定稳定的排序方法。的排序方法。的排序方法。的排序方法。第15页/共87页162.其它插入排序 折半插入排序折半插入排序(Binary Insertion Sort)折半插入排序基本思想是:设在顺序表中有一折半插入排序基本思想是:设在顺序表中有一折半插入排序基本思想是:设在顺序表中有一折半插入排序基本思想是:设
14、在顺序表中有一 个对象序列个对象序列个对象序列个对象序列 V0,V1,V0,V1,vn-1,vn-1。其中,。其中,。其中,。其中,v0,V1,vi-1 v0,V1,vi-1 是已经排好序的对象。在插入是已经排好序的对象。在插入是已经排好序的对象。在插入是已经排好序的对象。在插入 vi vi 时,利用折半搜索法寻找时,利用折半搜索法寻找时,利用折半搜索法寻找时,利用折半搜索法寻找 vi vi 的插入位置。的插入位置。的插入位置。的插入位置。2-路插入排序路插入排序 表插入排序表插入排序第16页/共87页17 折半插入排序的算法折半插入排序的算法10.210.2void BInsertSort(
15、SqList&L)int low,high,mid;for(int i=2;i=L.length;+i)L.r0=L.ri;low=1;high=i-1;while(low=high+1;-j)L.r j+1=L.r j;L.rhigh+1=L.r0;说明:low 或者 high+1为插入点 稳定排序第17页/共87页18 算法分析算法分析算法分析算法分析折半查找比顺序查找快,所以折半查找比顺序查找快,所以折半查找比顺序查找快,所以折半查找比顺序查找快,所以折半折半插入排序就平均性能来说比直接插入排序就平均性能来说比直接插入排序就平均性能来说比直接插入排序就平均性能来说比直接插入排序要快。插入
16、排序要快。插入排序要快。插入排序要快。它所需要的关键字比较次数与待排序对象序列的初始排列无关,仅它所需要的关键字比较次数与待排序对象序列的初始排列无关,仅它所需要的关键字比较次数与待排序对象序列的初始排列无关,仅它所需要的关键字比较次数与待排序对象序列的初始排列无关,仅依赖于对象个数。依赖于对象个数。依赖于对象个数。依赖于对象个数。在插入第在插入第在插入第在插入第 i i 个对象时,需要经过个对象时,需要经过个对象时,需要经过个对象时,需要经过 log2ilog2i +1 +1 次关次关次关次关键字比较,才能确定它应插入的位置。键字比较,才能确定它应插入的位置。键字比较,才能确定它应插入的位置
17、。键字比较,才能确定它应插入的位置。因此,将因此,将因此,将因此,将 n n 个对象(为推导个对象(为推导个对象(为推导个对象(为推导方便,设为方便,设为方便,设为方便,设为 n=2k)n=2k)用用用用折半折半插入排序所进行的关键字比较次数为:插入排序所进行的关键字比较次数为:插入排序所进行的关键字比较次数为:插入排序所进行的关键字比较次数为:第18页/共87页19第19页/共87页20 当当当当 n n 较较较较大大大大时时时时,总总总总关关关关键键键键字字字字比比比比较较较较次次次次数数数数比比比比直直直直接接接接插插插插入入入入排排排排序序序序的的的的最坏情况要好得多,但比其最好情况要
18、差。最坏情况要好得多,但比其最好情况要差。最坏情况要好得多,但比其最好情况要差。最坏情况要好得多,但比其最好情况要差。在在在在对对对对象象象象的的的的初初初初始始始始排排排排列列列列已已已已经经经经按按按按关关关关键键键键字字字字排排排排好好好好序序序序或或或或接接接接近近近近有有有有序序序序时时时时,直直直直接接接接插插插插入入入入排排排排序序序序比比比比折折半半插插插插入入入入排排排排序序序序执执执执行行行行的的的的关关关关键键键键字字字字比比比比较较较较次次次次数数数数要要要要少少少少。折折半半插插插插入入入入排排排排序序序序的的的的对对对对象象象象移移移移动动动动次次次次数数数数与与与
19、与直直直直接接接接插入排序相同,依赖于对象的初始排列。插入排序相同,依赖于对象的初始排列。插入排序相同,依赖于对象的初始排列。插入排序相同,依赖于对象的初始排列。折半折半插入排序是一个插入排序是一个插入排序是一个插入排序是一个稳定稳定稳定稳定的排序方法。的排序方法。的排序方法。的排序方法。第20页/共87页213.希尔排序(Shells Sort)基本思想基本思想 先将整个待排记录序列分割成为若干先将整个待排记录序列分割成为若干子序列子序列分别进行分别进行直接插入排序直接插入排序,待整个序列中的记录,待整个序列中的记录“基本有序基本有序”时,再对时,再对全体记录全体记录进行一次进行一次直接插入
20、排序直接插入排序。概念概念 希尔排序又称希尔排序又称“缩小增量排序缩小增量排序”(Diminishing Increment Sort)属于插入排序类的方法,其时间效率上优于前述几种方法。属于插入排序类的方法,其时间效率上优于前述几种方法。第21页/共87页22例,初始关键字序列为:例,初始关键字序列为:43 41 33 67 74 23 37 33 47 35d=5 43 2341 3733 3367 4774 35一趟排序的结果:一趟排序的结果:23 37 33 47 35 43 41 33 67 74希尔排序 例子例子第22页/共87页23 23 37 33 47 35 43 41 33
21、 67 74d=3 23 47 41 7437 35 3333 43 67二趟排序的结果:二趟排序的结果:23 33 33 41 35 43 47 37 67 74三趟排序三趟排序(直接插入排序直接插入排序)的结果:的结果:23 33 33 35 37 41 43 47 67 74希尔排序第23页/共87页24 10.3 交换排序 交换排序交换排序 (Exchange Sort)(Exchange Sort)交换排序的基本思想是两两比较待排序交换排序的基本思想是两两比较待排序对象的关键字,如果发生逆序对象的关键字,如果发生逆序(即排列顺即排列顺序与排序后的次序正好相反序与排序后的次序正好相反)
22、,则交换之,则交换之,直到所有对象都排好序为止。直到所有对象都排好序为止。第24页/共87页25 基本思想基本思想 将第将第1个记录的关键字和第个记录的关键字和第2个记录的关键字进行比较,若为个记录的关键字进行比较,若为逆序逆序(即(即r1.keyr2.key),则将两个记录),则将两个记录交换交换之,然后比较第之,然后比较第2个记录和第个记录和第3个记录个记录的关键字。依次类推,直至第的关键字。依次类推,直至第n-1个记录和第个记录和第n个记录的关键字进行过比较为止。个记录的关键字进行过比较为止。第一趟冒泡排序后,关键字最大的记录被放到最后一个记录的位置上。第一趟冒泡排序后,关键字最大的记录
23、被放到最后一个记录的位置上。对前对前n-1个记录进行同样操作,其结果是使关键字次大个记录进行同样操作,其结果是使关键字次大的记录被安置到第的记录被安置到第 n-1个记录的位置上。个记录的位置上。1.冒泡排序(Bubble Sort)第25页/共87页26 一般地,第一般地,第 i 趟冒泡排序是从趟冒泡排序是从 r1到到 rn-i+1依次比较相邻两个记录的关键依次比较相邻两个记录的关键字,并在字,并在“逆序逆序”时时交换交换相邻记录,其结果是这相邻记录,其结果是这n-i+1个记录中关键字最大的记个记录中关键字最大的记录被交换到第录被交换到第n-i+1 的位置上。整个排序过程需进行的位置上。整个排
24、序过程需进行k(1 k 1&change;-I)change=false;for(j=0;jaj+1)aj aj+1;change=TURE 算法复杂性分析:最好情况(正序):一趟排序,n-1次比较,移动0个记录 最坏情况(逆序):n-1趟排序,n-1+n-2+1=n(n-1/)/2 次比较,移动n(n-1/)/2个记录 时间复杂度:O(n2)第28页/共87页292.快速排序(Quick Sort)基本思想基本思想 根根据据选选定定的的支支点点L,通通过过一一趟趟排排序序将将待待排排记记录录分分割割成成独独立立的的两两部部分分,其其中中一一部部分分记记录录的的关关键键字字均均小小于于L,而而
25、另另一一部部分分记记录录的的关关键键字字均均大大于于等等于于L。分分别对这两部分记录继续进行排序,以达到整个序列有序别对这两部分记录继续进行排序,以达到整个序列有序。支点的选择方法支点的选择方法 取第一个记录;最后一个记录;第一个、最后一个和取第一个记录;最后一个记录;第一个、最后一个和中间记录三者中,关键字居中的那个记录。中间记录三者中,关键字居中的那个记录。第29页/共87页30 具体做法具体做法 设待排序的序列为设待排序的序列为rs,rs+1,rt。附设。附设两个指针两个指针i和和j,它们的初值分别为,它们的初值分别为s和和t,设支点记录,设支点记录pivot=rs,x=pivotkey
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 内部 排序
限制150内