第10章排序课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第10章排序课件.ppt》由用户(ziliao2023)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 排序 课件
- 资源描述:
-
1、教学内容教学内容1、插入排序(直接插入排序、折半插入排序、插入排序(直接插入排序、折半插入排序、希尔排序);希尔排序);2、交换排序(起泡排序、快速排序);、交换排序(起泡排序、快速排序);3、选择排序(直接选择排序、堆排序);、选择排序(直接选择排序、堆排序);4、归并排序;、归并排序;5、基数排序;、基数排序;排序:排序:将数据元素的一个任意序列,重新排列成一个将数据元素的一个任意序列,重新排列成一个的序列。的序列。10.1 概述概述 例:将关键字序列:例:将关键字序列:52,49,80,36,14,58,61,23 调整为:调整为:14,23,36,49,52,58,61,80 一般情况
2、下,假设含一般情况下,假设含 n 个记录的序列为个记录的序列为 R1,R2,Rn,其相应的关键字序列为其相应的关键字序列为 K1,K2,Kn 这些关键字相互之间可以进行比较,即在它们之间存在着这这些关键字相互之间可以进行比较,即在它们之间存在着这 样一个关系样一个关系:Kp1Kp2KpnKp1 Kp2 Kp3 Kp4 Kp5 Kp6 Kp7 Kp8 按此固有关系将上式记录序列重新排列为按此固有关系将上式记录序列重新排列为 Rp1,Rp2,Rpn 的操作称作的操作称作。Rp1,Rp2,Rp3,Rp4,Rp5,Rp6,Rp7,Rp8 若若 Ki 为记录为记录 Ri 的的关键字,则排序关键字,则排序
3、。若若 Ki 为记录为记录 Ri 的的关键字,则排序关键字,则排序可以可以(因为(因为 会有相同的关键字)。会有相同的关键字)。设设 Ki=Kj(1in,1jn,ij),且在排序前的序列中,且在排序前的序列中 Ri 领先于领先于 Rj(即(即 i j)。若在排序后的序列中)。若在排序后的序列中 Ri 仍领先于仍领先于 Rj,则,则 称所用的称所用的;反之,则称所用的;反之,则称所用的。例:例:设排序前的关键字序列为:设排序前的关键字序列为:52,49,80,36,14,58,23 若排序后的关键字序列为:若排序后的关键字序列为:14,23,36,49,52,58,80,则则。若排序后的关键字序
4、列为:若排序后的关键字序列为:14,23,36,49,52,58,80,则则。内部排序和外部排序内部排序和外部排序 若若整个排序过程不需要访问外存整个排序过程不需要访问外存便能完成,则称此类排序问便能完成,则称此类排序问 题题为内部排序;为内部排序;反之,若参加排序的记录数量很大,整个序列的排序过程反之,若参加排序的记录数量很大,整个序列的排序过程不不可能在内存中完成可能在内存中完成,则称此类排序问题,则称此类排序问题为外部排序为外部排序。内部排序的方法内部排序的方法 内部排序的过程是一个逐步扩大记录的有序序列的过程。内部排序的过程是一个逐步扩大记录的有序序列的过程。有序序列区有序序列区无无
5、序序 序序 列列 区区有序序列区有序序列区无无 序序 序序 列列 区区经过一趟排序经过一趟排序 排序方法分类:排序方法分类:1)、插入排序:、插入排序:直接插入排序、折半插入排序、希尔排序直接插入排序、折半插入排序、希尔排序 2)、交换排序:、交换排序:冒泡排序、快速排序冒泡排序、快速排序 3)、选择排序:、选择排序:简单选择排序、堆排序简单选择排序、堆排序 4)、归并排序:、归并排序:2-路归并排序路归并排序 5)、基数排序、基数排序 基于不同的基于不同的“扩大扩大”有序序列长度的方法,内部排序有序序列长度的方法,内部排序 方法大致可分下列几种类型:方法大致可分下列几种类型:将无序子序列中的
6、一将无序子序列中的一 个或几个记录个或几个记录“”到到有有 序序列中,从而增加记录序序列中,从而增加记录 的有序子序列的长度。的有序子序列的长度。通过通过“”无序序列中的记录从而无序序列中的记录从而 得到其中得到其中关键字最小关键字最小或或最大最大的记录,并的记录,并 将它将它加入到有序子序列加入到有序子序列中,以此方法增中,以此方法增 加记录的有序子序列的长度。加记录的有序子序列的长度。从记录的无序子序列中从记录的无序子序列中“”关键字最小关键字最小或或最大最大的记录,并将它的记录,并将它 加入到有序子序列加入到有序子序列中,以此方法增中,以此方法增 加记录的有序子序列的长度。加记录的有序子
7、序列的长度。通过通过“”两个两个 或两个以上的记录有或两个以上的记录有 序子序列,逐步增加序子序列,逐步增加 记录有序序列的长度。记录有序序列的长度。基数排序是一种基于多基数排序是一种基于多 关键字排序的思想,将单关关键字排序的思想,将单关 键字按基数分成键字按基数分成“多关键字多关键字”进行排序的方法。进行排序的方法。排序过程的基本操作:排序过程的基本操作:(1 1)比较:必要的;)比较:必要的;(2 2)移动:可以避免;)移动:可以避免;待排序记录的存储方式:待排序记录的存储方式:(1 1)顺序存储:移动不可避免)顺序存储:移动不可避免(2 2)静态链表(表排序):不移动记录,只修改指针;
8、)静态链表(表排序):不移动记录,只修改指针;(3 3)顺序存储,另设地址向量(地址排序):不移动记录,只)顺序存储,另设地址向量(地址排序):不移动记录,只 改变地址的值;改变地址的值;10.2 插入排序插入排序 有序序列有序序列 R1.i-1 Ri无序序列无序序列 Ri.n一趟直接插入排序的基本思想:一趟直接插入排序的基本思想:有序序列有序序列 R1.i无序序列无序序列 Ri+1.n实现实现“一趟插入排序一趟插入排序”可分可分三步三步进行:进行:3将将 Ri 插入(复制)到插入(复制)到 R j+1 的位置上。的位置上。2将将 R j+1.i-1 中的所有记录均后移一个位置;中的所有记录均
9、后移一个位置;1在在 R1.i-1 中查找中查找 Ri 的插入位置,的插入位置,R1.j.key Ri.key R j+1.i-1.key;10.2.1 直接插入排序直接插入排序 初始状态初始状态4938659776132749 R0 R1 R2 R3 R4 R5 R6 R7 R8 i=2 i=3 3849659776132749 i=4 3849659776132749 i=5 384965769713274976i=6 384965769713274913i=7 384965769713274927i=8 3849657697132749494938659776132749 3849387
10、 趟趟 排序排序 1 趟趟 排序排序 2 趟趟 排序排序 void InsertSort(SqList&L)/对顺序表对顺序表 L 作直接插入排序。作直接插入排序。for(i=2;i=L.length;+i)if(L.ri.key L.ri-1.key)/InsertSort 排序过程:排序过程:先将序列中第先将序列中第 1 个记录看成是一个有序子序列,个记录看成是一个有序子序列,然后从第然后从第 2 个记录开始,逐个进行插入,直至整个序列有序。个记录开始,逐个进行插入,直至整个序列有序。在在 R1.i-1中查找中查找 Ri 的插入位置的插入位置;对于在查找过程中找到的那些关键字对于在查找过程
11、中找到的那些关键字 不小于不小于 Ri.key 的记录,在查找的同的记录,在查找的同 时实现记录向后移动;时实现记录向后移动;L.r0=L.ri;/复制为监视哨复制为监视哨 L.ri=L.ri-1;for(j=i-2;L.r0.key L.r j.key;-j)L.r j+1=L.r j;/记录后移记录后移 比较次数和移动次数均比较次数和移动次数均为:为:112 nni2)1)(2(2 nnini2)1)(4()1(2 nnini42nT(n)=O(n)算法评价算法评价 时间复杂度:时间复杂度:比较次数:比较次数:移动次数:移动次数:0 最好的情况:最好的情况:待排序记录按关键字从小到大排列(
12、正序)待排序记录按关键字从小到大排列(正序)比较次数:比较次数:移动次数:移动次数:最坏的情况:最坏的情况:待排序记录按关键字从大到小排列(逆序)待排序记录按关键字从大到小排列(逆序)一般情况:一般情况:待排序记录是随机的,取平均值。待排序记录是随机的,取平均值。空间复杂度:空间复杂度:S(n)=O(1)直接插入排序是稳定排序直接插入排序是稳定排序 5 4 3 2 1 10.2.2 其他插入排序其他插入排序 1、折半插入排序:、折半插入排序:用折半查找方法确定插入位置的排序。用折半查找方法确定插入位置的排序。void BInsertSort(SqList&L)(i=2;i=L.length;+
13、i)L.r0=L.ri;low=1;high=i-1;while(low=high+1;-j)L.rj+1=L.rj;/记录后移记录后移 L.rhigh+1=L.r0;/插入插入 /BInsertSorti=1 (30)13 70 85 39 42 6 20 i=7 6 (6 13 30 39 42 70 85)20 i=8 20 (6 13 30 39 42 70 85)20 lhmmi=8 20 (6 13 30 39 42 70 85)20 lhi=8 20 (6 13 30 39 42 70 85)20 lhi=8 20 (6 13 20 30 39 42 70 85)i=8 20 (
14、6 13 30 39 42 70 85)20 lhmT(n)=O(n)时间复杂度:时间复杂度:空间复杂度:空间复杂度:S(n)=O(1)折半插入排序是稳定排序折半插入排序是稳定排序 仅减少了比较次数,仅减少了比较次数,移动次数不变。移动次数不变。直到直到lowhigh时,由折半查找得到的插时,由折半查找得到的插入位置为入位置为low或或high+1。第二趟希尔排序第二趟希尔排序 第三趟分组,设第三趟分组,设 d3=1 10.2.3 希尔排序(缩小增量排序)希尔排序(缩小增量排序)基本思想:基本思想:对待排序列先作对待排序列先作“宏观宏观”调整,再作调整,再作“微观微观”调调整。整。排序过程:排
15、序过程:先取一个正整数先取一个正整数 d1 n,把所有相隔把所有相隔 d1 的记录放的记录放 在一组内,组内进行直接插入排序;然后取在一组内,组内进行直接插入排序;然后取 d2 d1,重复上述分重复上述分 组和排序操作;直至组和排序操作;直至 di=1,即所有记录放进一个组中排序为止。即所有记录放进一个组中排序为止。其中其中 称为称为。例:例:49 38 65 97 76 13 27 49 55 04 第一趟希尔排序第一趟希尔排序 13 27 49 55 04 49 38 65 97 76 13 04 49 38 27 49 55 65 97 76第三趟希尔排序第三趟希尔排序 第一趟分组,设第
16、一趟分组,设 d1=5 49 38 65 97 76 13 27 49 55 04 13 27 49 55 04 49 38 65 97 76 第二趟分组,设第二趟分组,设 d2=3 04 13 27 38 49 49 55 65 76 973.应用举例 设有一组关键字序列为(49,38,65,97,76,13,27,49,55,04),进行shell排序,增量序列为5,3,1,写出每趟的排序结果。012345678910初始关键字49 38 65 97 76 13 27 49 55 04第第1趟(趟(d1=5)4913134938272738654949659755559776040476第
17、第2趟(趟(d2=3)1355387613385576270465042765494997494997第第3趟(趟(d3=1)1304 49 3827 4955 6597 760413 2738 49 4955 6576 97希尔排序特点:希尔排序特点:分组不是简单的分组不是简单的“逐段分割逐段分割”,而是将相隔某个增量的记录组成,而是将相隔某个增量的记录组成 一个子序列。一个子序列。增量序列取法增量序列取法 希尔最早提出的选法是希尔最早提出的选法是 d1=n/2,di+1=di/2。克努特克努特(Knuth)提出的选法是提出的选法是 di+1=(di-1)/3。还有其他不同的取法。还有其他不
18、同的取法。如何选择增量序列以产生最好的排序效果,至今仍没有从数学如何选择增量序列以产生最好的排序效果,至今仍没有从数学 上得到解决。上得到解决。1)、没有除、没有除 1 以外的公因子;以外的公因子;2)、最后一个增量值必须为、最后一个增量值必须为 1。希尔排序可提高排序速度希尔排序可提高排序速度 1)、记录跳跃式前移,在进行最后一趟排序时,已基本有序。记录跳跃式前移,在进行最后一趟排序时,已基本有序。2)、分组后、分组后 n 值减小,值减小,n2 更小,而更小,而 T(n)=O(n2),所以所以 T(n)从从 总体上看是减小了。总体上看是减小了。3、重复直到重复直到 “”或或“”为止。为止。1
19、0.3 交换排序交换排序 1、冒泡排序、冒泡排序 v 排序过程排序过程 1、比较第一个记录与第二个、比较第一个记录与第二个 记录,若记录,若关键字关键字为逆序为逆序则交换;然则交换;然 后比较第二个记录与第三个记录;后比较第二个记录与第三个记录;依次类推,直至第依次类推,直至第 n-1 个记录和第个记录和第 n 个记录比较为止个记录比较为止,结果关键字最大的记录被安,结果关键字最大的记录被安 置在最后一个记录上。置在最后一个记录上。2、对前对前 n-1 个记录进行第二个记录进行第二 趟冒泡排序,结果使关键字次大的趟冒泡排序,结果使关键字次大的 记录被安置在第记录被安置在第 n-1 个记录位置。
20、个记录位置。初初 始始 关关 键键 字字 49 38 65 97 76 13 27 49 第第 一一 趟趟 排排 序序 49 38 49 97 76 97 97 13 97 97 27 97 97 49 38 49 65 76 13 27 49 38 49 65 13 27 49 第第 二二 趟趟 排排 序序 38 49 13 27 49 第第 三三 趟趟 排排 序序 38 13 27 49 第第 四四 趟趟 排排 序序 13 27 38第第 五五 趟趟 排排 序序 第第 六六 趟趟 排排 序序 for(j=1;j ;j+)if (r j+1 r j)r j r j+1 ;for(j=1;j
21、;j+)if (r j+1 1;i-);while(i 1)/while i=n;i=k;Void BubbleSort(SqList&L)初初 始始 关关 键键 字字 49 38 65 97 76 13 27 49 k=j;/交换的位置交换的位置(k k以后若正序就不用交换)以后若正序就不用交换)k=1;一般情况下每经过一般情况下每经过 一趟一趟“起泡起泡”,“i 减减 1”,但并不是每趟都如此。但并不是每趟都如此。例:例:5 2 3 1 9 7 8 2 3 1 5 7 8 9 2 1 3 5 7 8 9i=6 i=2 1 2 3 5 7 8 9i=1 v 算法评价算法评价 时间复杂度:时间
22、复杂度:最好情况(正序)最好情况(正序)比较次数:比较次数:n-1 移动次数:移动次数:0 T(n)=O(n)最坏情况(逆序)最坏情况(逆序)比较次数:比较次数:移动次数:移动次数:)(21)1(22nnini )(23)1(322nnini 空间复杂度:空间复杂度:S(n)=O(1)稳定性:稳定排序稳定性:稳定排序 一般取第一个记录一般取第一个记录 基本思想:基本思想:一个记录,以它的关键字作为一个记录,以它的关键字作为“”,凡,凡键字小于枢轴的记录均移至枢轴之前,凡关键字大于枢轴的记录键字小于枢轴的记录均移至枢轴之前,凡关键字大于枢轴的记录 均移至枢轴之后。均移至枢轴之后。2、一趟快速排序
23、(一次划分)、一趟快速排序(一次划分)lowhigh设设 Rs=52 为枢轴。为枢轴。例:例:52 49 80 36 14 58 61 97 23 75 st 附设两个指针附设两个指针 low 和和 high,从,从 high 所指位置起向前搜索找所指位置起向前搜索找 到第一个关键字小于枢轴的关键字的记录与枢轴记录交换,然后到第一个关键字小于枢轴的关键字的记录与枢轴记录交换,然后 从从 low 所指位置起向后搜索找到第一个关键字大于枢轴的关键字所指位置起向后搜索找到第一个关键字大于枢轴的关键字 的记录与枢轴记录交换,重复这两步直至的记录与枢轴记录交换,重复这两步直至 low=high 为止。为
24、止。high23 low low80highhighhighhigh14lowlowint Partition(SqList&L,int low,int high)pivotkey=L.rlow.key;/用子表的第一个记录作枢轴记录用子表的第一个记录作枢轴记录 while(low high)while(low=pivotkey)-high;/将比枢轴小的记录交换到低端将比枢轴小的记录交换到低端 while(low high&L.rlow.key=pivotkey)+low;/将比枢轴大的记录交换到高端将比枢轴大的记录交换到高端 /while return low;/返回枢轴所在位置返回枢轴所
25、在位置/PartitionL.r0=L.rlow;L.rlow=L.rhigh;=L.r0;L.r0=L.rlow;=L.rhigh;L.rhigh=L.r0;L.r0=L.rlow;L.rlow=L.r0;/将比枢轴小的记录移到低端将比枢轴小的记录移到低端 /将比枢轴大的记录移到高端将比枢轴大的记录移到高端 快速排序过程快速排序过程 3、快速排序、快速排序 首先对无序的记录序列进行首先对无序的记录序列进行“一次划分一次划分”,之后分别对分割,之后分别对分割 所得两个子序列所得两个子序列“递归递归”进行一趟快速排序。进行一趟快速排序。无无 序序 的的 记记 录录 序序 列列无序记录子序列无序记
展开阅读全文