《数据结构排序》PPT课件.ppt
《《数据结构排序》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《数据结构排序》PPT课件.ppt(164页珍藏版)》请在三一办公上搜索。
1、1,第9章 排序,2,目 录,9.1 基本概念,9.2 插入排序,9.3 交换排序,9.5 归并排序,退出,9.4 选择排序,3,91 基本概念,排序:是计算机程序设计中的一项重要操作,其功能是指一个数据元素集合或序列重新排列成一个按数据元素某个数据项值有序的序列。排序码(关键码):排序依据的数据项。稳定排序:排序前与排序后相同关键码元素间的位置关系,保持一致的排序方法。不稳定排序:排序前与排序后相同关键码元素间的相对位置发生改变的排序方法。排序分为两类:(1)内排序:指待排序列完全存放在内存中所进行的排序。内排序大致可分为五类:插入排序、交换排序、选择排序、归并排序和分配排序。本章主要讨论内
2、排序。(2)外排序:指排序过程中还需访问外存储器的排序。为了以后讨论方便,我们直接将排序码写成一个一维数组的形式,并且在没有声明的情形下,所有排序都按排序码的值递增排列。,4,9.2 插入排序,基本思想:每次将一个待排序的元素,按其关键字的大小插入到前面已经排好序的子文件的适当位置,直到全部记录插入完成为止。,9.2.1 直接插入排序 直接插入排序的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有
3、序表。,5,例如,n=6,数组R的六个排序码分别为:17,3,25,14,20,9。它的直接插入排序的执行过程如下:,直接插入排序举例,6,void D-InsertSort(datatype R,int n)/*待排序的n个元素放在数组R中,用直接插入法进行排序*/for(i=2;i=n;i+)/*i控制第i-1次插入,最多进行n-1次插入*/if(Ri.keyRi-1.key)/*小于时,需将Ri插入有序表*/R0=Ri;/*为统一算法设置监视哨*/for(j=i-1;R0.keyRj.key;j-)Rj+1=Rj;/*元素后移*/Rj+1=R0;/*将放在R0中的第i个元素插入到有序表中
4、*/,直接插入排序算法,7,直接插入排序的效率分析,首先从空间来看,它只需要一个元素的辅助空间,用于元素的位置交换。从时间分析,首先外层循环要进行n-1次插入,每次插入最少比较一次(正序),移动0次;最多比较i次(包括同监视哨R0的比较),移动i1次(逆序)(i=2,3,n)。因此,直接插入排序的时间复杂度为O(n2)。直接插入算法的元素移动是顺序的,该方法是稳定的。,8,9.2.2 希尔排序(缩小增量排序),希尔排序的基本思想:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入
5、排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上有较大提高。,9,八个元素的关键码分别为:91,67,35,62,29,72,46,57,希尔排序算法的执行过程为:,希尔排序过程举例,10,希尔排序算法,void ShellSort(datatype R,int d,int t)/*按增量序列d0、d1、d2、dt-1对顺序表R1、R2、Rn作希尔排序,注意d0、d1、d2、dt-1 除1之外不能有公因子,且dt-1必须为1*/for(k=0;k0)/*插入到正确位置*/,11,希尔排序的效率分析,虽然我们给出的算法是三层循环,最外层循环为l
6、og2n数量级,中间的for循环是n数量级的,内循环远远低于n数量级,因为当分组较多时,组内元素较少;此循环次数少;当分组较少时,组内元素增多,但已接近有序,循环次数并不增加。因此,希尔排序的时间复杂性在O(nlog2n)和O(n2)之间,大致为O(n1.3)。由于希尔排序对每个子序列单独比较,在比较时进行元素移动,有可能改变相同排序码元素的原始顺序,因此希尔排序是不稳定的。,12,9.3 交换排序 主要是通过排序表中两个记录关键码的比较,若与排序要求相逆(不符合升序或降序),则将两者交换。,9.3.1 冒泡排序,冒泡排序的基本思想:通过对待排序序列从前向后,依次比较相邻元素的排序码,若发现逆
7、序则交换,使排序码较大的元素逐渐从前部移向后部。因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志swap判断元素是否进行过交换。从而减少不必要的比较。,13,0 1 2 3 4 5 6 7 8,49,49,38,38,65,65,97,97,76,76,13,13,27,27,49,49,14,0 1 2 3 4 5 6 7 8,49,38,49,38,65,65,97,97,76,76,13,13,27,27,49,49,15,0 1 2 3 4 5 6 7 8,49,38,49,38,65,65,97,97,76,7
8、6,13,13,27,27,49,49,16,0 1 2 3 4 5 6 7 8,49,38,49,38,65,65,97,97,76,76,13,13,27,27,49,49,17,0 1 2 3 4 5 6 7 8,49,38,49,38,65,65,97,97,76,76,13,13,27,27,49,49,18,0 1 2 3 4 5 6 7 8,49,38,49,38,65,65,76,97,76,97,13,13,27,27,49,49,19,0 1 2 3 4 5 6 7 8,49,38,49,38,65,65,76,97,76,97,13,13,27,27,49,49,20,0
9、 1 2 3 4 5 6 7 8,49,38,49,38,65,65,76,97,76,13,97,13,27,27,49,49,21,0 1 2 3 4 5 6 7 8,49,38,49,38,65,65,76,97,76,13,97,13,27,27,49,49,22,0 1 2 3 4 5 6 7 8,49,38,49,38,65,65,76,97,76,13,27,13,27,97,49,49,23,0 1 2 3 4 5 6 7 8,49,38,49,38,65,65,76,97,76,13,27,13,27,97,49,49,24,0 1 2 3 4 5 6 7 8,49,38,4
10、9,38,65,65,76,97,76,13,27,13,27,49,97,49,25,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,65,76,13,27,49,97,38,49,65,76,13,27,49,97,26,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,65,76,13,27,49,97,38,49,65,76,13,27,49,97,27,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,65,76,13,27,49,97,38,4
11、9,65,76,13,27,49,97,28,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,65,76,13,27,49,97,38,49,65,76,13,27,49,97,29,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,65,76,13,27,49,97,38,49,65,13,76,27,49,97,30,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,65,76,13,27,49,97,38,49,65,13,76,27,49,97,3
12、1,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,65,76,13,27,49,97,38,49,65,13,27,76,49,97,32,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,65,76,13,27,49,97,38,49,65,13,27,76,49,97,33,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,65,76,13,27,49,97,38,49,65,13,27,49,76,97,34,0 1 2 3 4 5 6 7 8,3
13、8,49,65,76,13,27,49,97,38,49,65,13,27,49,76,97,38,49,65,13,27,49,76,97,35,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,65,13,27,49,76,97,38,49,65,13,27,49,76,97,36,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,65,13,27,49,76,97,38,49,65,13,27,49,76,97,37,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,9
14、7,38,49,65,13,27,49,76,97,38,49,13,65,27,49,76,97,38,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,65,13,27,49,76,97,38,49,13,65,27,49,76,97,39,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,65,13,27,49,76,97,38,49,13,27,65,49,76,97,40,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,65,13,27,49,7
15、6,97,38,49,13,27,65,49,76,97,41,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,65,13,27,49,76,97,38,49,13,27,49,65,76,97,42,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,13,27,49,65,76,97,38,49,13,27,49,65,76,97,43,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,13,27,49,65,76,97,38,49,13,27,49,6
16、5,76,97,44,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,13,27,49,65,76,97,38,13,49,27,49,65,76,97,45,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,13,27,49,65,76,97,38,13,49,27,49,65,76,97,46,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,49,13,27,49,65,76,97,38,13,27,49,49,65,76,97,47,0 1 2 3 4
17、5 6 7 8,38,49,65,76,13,27,49,97,38,49,13,27,49,65,76,97,38,13,27,49,49,65,76,97,48,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,13,27,49,49,65,76,97,38,13,27,49,49,65,76,97,49,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,13,27,49,49,65,76,97,13,38,27,49,49,65,76,97,50,0 1 2 3 4 5 6 7 8,38,49,65,76,1
18、3,27,49,97,38,13,27,49,49,65,76,97,13,38,27,49,49,65,76,97,51,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,13,27,49,49,65,76,97,13,27,38,49,49,65,76,97,52,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,38,13,27,49,49,65,76,97,13,27,38,49,49,65,76,97,53,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,13,27,38,4
19、9,49,65,76,97,13,27,38,49,49,65,76,97,54,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,13,27,38,49,49,65,76,97,13,27,38,49,49,65,76,97,55,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,13,27,38,49,49,65,76,97,13,27,38,49,49,65,76,97,56,0 1 2 3 4 5 6 7 8,38,49,65,76,13,27,49,97,13,27,38,49,49,65,76,97,13,27,3
20、8,49,49,65,76,97,57,冒泡排序算法的实现void Bubble-sort(datatype R,int n)int i,j,swap;/*当swap为0则停止排序*/for(i=1;iRj+1.key)/*发生逆序*/R0=Rj;Rj=Rj+1;Rj+1=R0;swap=1;/*交换,并标记发生了交换*/if(swap=0)break;,58,冒泡排序的效率分析 从冒泡排序的算法可以看出,若待排序的元素为正序,则只需进行一趟排序,比较次数为(n-1)次,移动元素次数为0;若待排序的元素为逆序,则需进行n-1趟排序,比较次数为(n2-n)/2,移动次数为3(n2-n)/2,因此
21、冒泡排序算法的时间复杂度为O(n2)。由于其中的元素移动较多,所以属于内排序中速度较慢的一种。因为冒泡排序算法只进行元素间的顺序移动,所以是一个稳定的算法。,59,9.3.2 快速排序(分区交换排序),快速排序(Quick Sorting)是迄今为止所有内排序算法中速度最快的一种。它的基本思想是:任取待排序序列中的某个元素作为标准(也称为支点、界点,一般取第一个元素),通过一次划分,将待排元素分为左右两个子序列,左子序列元素的排序码均小于基准元素的排序码,右子序列的排序码则大于或等于基准元素的排序码,然后分别对两个子序列继续进行划分,直至每一个序列只有一个元素为止。最后得到的序列便是有序序列。
22、,第1趟 27 38 13 49 76 97 65 49,第2趟 13 27 38 49 49 65 76 97,第3趟 13 27 38 49 4965 76 97,最后结果 13 27 38 49 49 65 76 97,假设:49 38 65 97 76 13 27 49,60,一次划分的具体过程,1low指向待划分区域首元素,high指向待划分区域尾元素;2R0=Rlow(为了减少数据的移动,将作为标准的元素暂存 到R0中,最后再放入最终位置);3.high从后往前移动直到Rhigh.key=R0.key;6.Rhigh=Rlow,high-;7.goto 3;8.直到low=high
23、时,Rlow=R0(即将作为标准的元素放到 其最终位置)。概括地说,一次划分就是从表的两端交替地向中间进行扫描,将小的放到左边,大的放到右边,作为标准的元素放到中间。,61,完成一趟排序:(27 38 13)49(76 97 65 50),分别进行快速排序:(13)27(38)49(50 65)76(97),快速排序结束:13 27 38 49 50 65 76 97,27,27,65,65,13,13,97,97,快速排序的排序过程,62,一次划分的具体过程示例,如:将序列 49、38、65、97、76、13、27、49 一次划分的过程为:,一次划分的具体过程为:,1.low指向待划分区域首
24、元素,high指向待划分区 域尾元素;,63,0 1 2 3 4 5 6 7 8,49,38,38,65,65,97,97,76,76,13,13,27,27,49,49,49,界点,一次划分的具体过程示例,如:将序列 49、38、65、97、76、13、27、49 一次划分的过程为:,一次划分的具体过程为:1.low指向待划分区域首元素,high指向待划分区 域尾元素;2.R0=Rlow(为了减少数据的移动,将作为标准 的元素暂存 到R0中,最后再放入最终位置);,64,0 1 2 3 4 5 6 7 8,49,38,38,65,65,97,97,76,76,13,13,27,27,49,4
25、9,49,界点,一次划分的具体过程示例,如:将序列 49、38、65、97、76、13、27、49 一次划分的过程为:,一次划分的具体过程为:1.low指向待划分区域首元素,high指向待划分区 域尾元素;2.R0=Rlow(为了减少数据的移动,将作为标准 的元素暂存 到R0中,最后再放入最终位置);3.high从后往前移动直到Rhigh.keyR0.key;,65,0 1 2 3 4 5 6 7 8,49,38,38,65,65,97,97,76,76,13,13,27,27,49,49,49,界点,66,0 1 2 3 4 5 6 7 8,49,38,38,65,65,97,97,76,7
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构排序 数据结构 排序 PPT 课件
链接地址:https://www.31ppt.com/p-5519676.html