数据结构-排序.优秀PPT.ppt





《数据结构-排序.优秀PPT.ppt》由会员分享,可在线阅读,更多相关《数据结构-排序.优秀PPT.ppt(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第1页数据结构(C+语言版)第2页排序的基本概念1交换类排序3 3选择类排序3 4插入类排序3 2目 录归并排序3 5小结3 6第3页 排序:将数据元素的一个随意序列,重新排列成一个按关键排序:将数据元素的一个随意序列,重新排列成一个按关键 字有序的序列。字有序的序列。概念概念 例:将关键字序列:例:将关键字序列:52,49,80,36,14,58,61,23 调整为:调整为:14,23,36,49,52,58,61,80 一般状况下,假设含一般状况下,假设含 n 个记录的序列为个记录的序列为 R1,R2,Rn,其相应的关键字序列为其相应的关键字序列为 K1,K2,Kn R R1 1,R R2
2、 2,R R3 3,R R4 4,R R5 5,R R6 6,R R7 7,R R8 8 K K1 1,K K2 2,K K3 3,K K4 4,K K5 5,K K6 6,K K7 7,K K8 8 这些关键字相互之间可以进行比较,即在它们之间存在着这这些关键字相互之间可以进行比较,即在它们之间存在着这 样一个关系样一个关系(在次探讨升序在次探讨升序):Kp1Kp2KpnKp1 Kp2 Kp3 Kp4 Kp5 Kp6 Kp7 Kp8 按此固有关系将上式记录序列重新排列为按此固有关系将上式记录序列重新排列为 Rp1,Rp2,Rpn 的操作称作的操作称作排序排序排序排序。Rp1,Rp2,Rp3,
3、Rp4,Rp5,Rp6,Rp7,Rp8 第4页 若若 Ki 为记录为记录 Ri 的的主主主主关键字,则排序关键字,则排序结果惟一结果惟一结果惟一结果惟一。若若 Ki 为记录为记录 Ri 的的次次次次关键字,则排序关键字,则排序结果结果结果结果可以可以不惟一不惟一不惟一不惟一(因为(因为 会有相同的关键字)。会有相同的关键字)。例:例:设排序前的关键字序列为:设排序前的关键字序列为:52,49,80,36,14,58,3636,23 若排序后的关键字序列为:若排序后的关键字序列为:14,23,36,3636,49,52,58,80,则则排序方法是稳定的排序方法是稳定的排序方法是稳定的排序方法是稳
4、定的。若排序后的关键字序列为:若排序后的关键字序列为:14,23,3636,36,49,52,58,80,则则排序方法是不稳定的排序方法是不稳定的排序方法是不稳定的排序方法是不稳定的。第5页 内部排序和外部排序内部排序和外部排序 若整个排序过程不须要访问外存便能完成,则称此类排序问若整个排序过程不须要访问外存便能完成,则称此类排序问 题为内部排序;题为内部排序;反之,若参与排序的记录数量很大,整个序列的排序过程不反之,若参与排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序可能在内存中完成,则称此类排序问题为外部排序(本章不探讨本章不探讨)。内部排序的方法内部
5、排序的方法内部排序的过程是一个逐步扩大记录的有序序列的过程。内部排序的过程是一个逐步扩大记录的有序序列的过程。有序序列区有序序列区无无 序序 序序 列列 区区有序序列区有序序列区无无 序序 序序 列列 区区经过一趟排序经过一趟排序 第6页排序方法分类:排序方法分类:1)、插入排序:、插入排序:直接插入排序、折半插入排序、希尔排序直接插入排序、折半插入排序、希尔排序 2)、交换排序:、交换排序:冒泡排序、快速排序冒泡排序、快速排序 3)、选择排序:、选择排序:简单选择排序、堆排序简单选择排序、堆排序 4)、归并排序:、归并排序:2-路归并排序路归并排序 5)、基数排序、基数排序 基于不同的基于不
6、同的“扩大扩大”有序序列长度的方法,内部排序有序序列长度的方法,内部排序 方法大致可分下列几种类型:方法大致可分下列几种类型:依次将无序子序列中的一依次将无序子序列中的一 个记录个记录“插入插入插入插入”到有到有 序序列中,序序列中,从而增加记录从而增加记录 的有序子序列的的有序子序列的长度。长度。通过通过“交换交换交换交换”无序序列中的记录从而无序序列中的记录从而 得到其中得到其中关键字最小关键字最小或或最大最大的记录,并的记录,并 将它将它加入到有序子序列加入到有序子序列中,以此方法增中,以此方法增 加记录的有序子序列的长度。加记录的有序子序列的长度。从记录的无序子序列中从记录的无序子序列
7、中“选择选择选择选择”关键字最小关键字最小或或最大最大的记录,并将它的记录,并将它 加入到有序子序列加入到有序子序列中,以此方法增中,以此方法增 加记录的有序子序列的长度。加记录的有序子序列的长度。通过通过“归并归并归并归并”两个两个 或两个以上的记录有或两个以上的记录有 序子序列,逐步增加序子序列,逐步增加 记录有序序列的长度。记录有序序列的长度。基数排序是一种基于多基数排序是一种基于多 关键字排序的思想,将单关关键字排序的思想,将单关 键字按基数分成键字按基数分成“多关键字多关键字”进行排序的方法。进行排序的方法。第7页排序的基本概念1交换类排序3 3选择类排序3 4插入类排序3 2目 录
8、归并排序3 5小结3 6第8页插入排序插入排序 一趟干脆插入排序的基本思想:一趟干脆插入排序的基本思想:有序序列有序序列 R1.i-1 Ri无序序列无序序列 Ri.n有序序列有序序列 R1.i无序序列无序序列 Ri+1.n实现实现“一趟插入排序一趟插入排序”可分可分三步三步进行:进行:3将将 Ri 插入(复制)到插入(复制)到 相应相应 的位置上。的位置上。2记录后移一个位置;记录后移一个位置;1在在 有序区有序区 中查找中查找 Ri 的插入位置,的插入位置,简洁排序方法简洁排序方法第9页干脆插入排序干脆插入排序 初始状态初始状态4938659776132749 R0 R1 R2 R3 R4
9、R5 R6 R7 R8 i=2 i=3 3849659776132749 i=4 3849659776132749 i=5 384965769713274976i=6 384965769713274913i=7 384965769713274927i=8 3849657697132749494938659776132749 3849387 趟趟 排序排序 1 趟趟 排序排序 2 趟趟 排序排序 void InsertSort(SqList&L)/对依次表对依次表 L 作干脆插入排序。作干脆插入排序。for(i=2;i=L.length;+i)if(L.ri.key L.ri-1.key)/In
10、sertSort 排序过程:先将序列中第排序过程:先将序列中第 1 个记录看成是一个有序子序列,个记录看成是一个有序子序列,然后从第然后从第 2 个记录起先,逐个进行插入,直至整个序列有序。个记录起先,逐个进行插入,直至整个序列有序。在在 R1.i-1中查找中查找 Ri 的插入位置的插入位置;对于在查找过程中找到的那些关键字对于在查找过程中找到的那些关键字 不小于不小于 Ri.key 的记录,在查找的同的记录,在查找的同 时实现记录向后移动;时实现记录向后移动;插入插入插入插入 R Ri i;L.r0=L.ri;/复制为监视哨复制为监视哨 L.ri=L.ri-1;for(j=i-2;L.r0.
11、key L.r j.key;-j)L.r j+1=L.r j;/记录后移记录后移 L.r L.r j j+1=L.r0;/+1=L.r0;/插入到正确位置插入到正确位置插入到正确位置插入到正确位置 第10页比较次数和移动次数均比较次数和移动次数均约约约约为:为:T(n)=O(n)算法评价算法评价 时间困难度:时间困难度:比较次数:比较次数:移动次数:移动次数:0 最好的状况:待排序记录按关键字从小到大排列(正序)最好的状况:待排序记录按关键字从小到大排列(正序)比较次数:比较次数:移动次数:移动次数:最坏的状况:待排序记录按关键字从大到小排列(逆序)最坏的状况:待排序记录按关键字从大到小排列(
12、逆序)一般状况:待排序记录是随机的,取平均值。一般状况:待排序记录是随机的,取平均值。空间困难度:空间困难度:S(n)=O(1)干脆插入排序是稳定排序干脆插入排序是稳定排序 5 4 3 2 1 第11页其次趟希尔排序其次趟希尔排序 第三趟分组,设第三趟分组,设 d3=1 希尔排序(缩小增量排序)希尔排序(缩小增量排序)基本思想基本思想:对待排序列先作对待排序列先作“宏观宏观”调整,再作调整,再作“微观微观”调调整。整。排序过程:先取一个正整数排序过程:先取一个正整数 d1 n,把全部相隔,把全部相隔 d1 的记录放的记录放 在一组内,组内进行干脆插入排序;然后取在一组内,组内进行干脆插入排序;
13、然后取 d2 d1,重复上述分,重复上述分 组和排序操作;直至组和排序操作;直至 di=1,即全部记录放进一个组中排序为止。,即全部记录放进一个组中排序为止。其中其中 di 称为增量。称为增量。例:例: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第三趟希尔排序第三趟希尔排序 第一趟分组,设第一趟分组,设 d1=5 49 38 65 97 76 13 27 49 55 04 13 27 49 55 04 49 38 65 97 76
14、其次趟分组,设其次趟分组,设 d2=3 04 13 27 38 49 49 55 65 76 97第12页例例:待待排排序序列列为为 34,81,72,42,10,28,52,77,33,13,109,4,42,89。增量增量增量增量di分别取分别取5、3、1,则排序过程如下:,则排序过程如下:d0=534 81 72 42 10 28 52 77 33 13 109 4 42 89 子序列分别为子序列分别为34,28,109,81,52,4,72,77,42,42,33,89,10,13。第13页第一趟排序结果:第一趟排序结果:28 4 42 33 10 34 52 72 42 13 109
15、 81 77 89 其次趟排序结果:其次趟排序结果:13 4 34 28 13 42 33 72 42 52 89 81 77 109 此此时时,序序列列基基本本“有有序序”,对对其其进进行行干干脆脆插插入入排排序,得到最终结果:序,得到最终结果:4 10 13 28 33 34 42 42 52 72 77 81 89 109第14页希尔排序特点希尔排序特点:分组不是简洁的分组不是简洁的“逐段分割逐段分割”,而是将相隔某个增量的记录组成,而是将相隔某个增量的记录组成 一个子序列。一个子序列。增量序列取法增量序列取法 希尔最早提出的选法是希尔最早提出的选法是 d1=n/2,di+1=di/2。
16、克努特克努特(Knuth)提出的选法是提出的选法是 di+1=(di-1)/3。还有其他不同的取法。还有其他不同的取法。如何选择增量序列以产生最好的排序效果,至今仍没有从数学如何选择增量序列以产生最好的排序效果,至今仍没有从数学 上得到解决。上得到解决。最终一个增量值必需为最终一个增量值必需为 1。希尔排序可提高排序速度希尔排序可提高排序速度 1)、记录跳动式前移,在进行最终一趟排序时,已基本有序。、记录跳动式前移,在进行最终一趟排序时,已基本有序。2)、分组后、分组后 n 值减小,值减小,n2 更小,而更小,而 T(n)=O(n2),所以,所以 T(n)从从 总体上看是减小了。总体上看是减小
17、了。第15页排序的基本概念1交换类排序3 3选择类排序3 4插入类排序3 2目 录归并排序3 5小结3 6第16页 3、重复直到重复直到 “在一趟排序在一趟排序在一趟排序在一趟排序 过程中没有进行过交换记录的操过程中没有进行过交换记录的操过程中没有进行过交换记录的操过程中没有进行过交换记录的操 作作作作”或或“仅第一二个交换过仅第一二个交换过仅第一二个交换过仅第一二个交换过”为止。为止。冒泡排序算法冒泡排序算法冒泡排序算法冒泡排序算法(改进改进改进改进)交换排序交换排序 冒泡排序冒泡排序 v 排序过程排序过程 1、比较第一个记录与其次个、比较第一个记录与其次个 记录,若关键字为逆序则交换;然记
18、录,若关键字为逆序则交换;然 后比较其次个记录与第三个记录;后比较其次个记录与第三个记录;依次类推,直至第依次类推,直至第 n-1 个记录和第个记录和第 n 个记录比较为止个记录比较为止第一趟冒泡第一趟冒泡 排序,结果关键字最大的记录被安排序,结果关键字最大的记录被安 置在最终一个记录上。置在最终一个记录上。2、对前、对前 n-1 个记录进行其次个记录进行其次 趟冒泡排序,结果使关键字次大的趟冒泡排序,结果使关键字次大的 记录被安置在第记录被安置在第 n-1 个记录位置。个记录位置。初初 始始 关关 键键 字字 49 38 65 97 76 13 27 49 第第 一一 趟趟 排排 序序 49
19、 38 49 97 76 97 97 13 97 97 27 97 97 49 9797 38 49 65 76 13 27 49 979738 49 65 13 27 49 76 76 第第 二二 趟趟 排排 序序 38 49 13 27 49 65 65 第第 三三 趟趟 排排 序序 38 13 27 49 4949 第第 四四 趟趟 排排 序序 13 27 3849 49 第第 五五 趟趟 排排 序序 13 13 27 27 38 38 第第 六六 趟趟 排排 序序 for(j=1;j n n ;j+)if (r j+1 r j)r j r j+1 ;for(j=1;j n n-1-1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 排序 优秀 PPT

限制150内