《计算机应用基础课件》1.6排序.ppt
《《计算机应用基础课件》1.6排序.ppt》由会员分享,可在线阅读,更多相关《《计算机应用基础课件》1.6排序.ppt(46页珍藏版)》请在三一办公上搜索。
1、,第 1 章 数据结构,主要内容1.1 基本数据结构与算法 1.2 线性表 1.3 栈和队列1.4 树和二叉树 1.5 查找1.6 排序,姓名 学号 成绩 班级 李红 9761059 95 机97.6,10,65,865,1.6 排序,排序又称分类,是计算机程序设计中一个重要运算,它的功能是将一组任意序列的数据元素,进行按关键字由大到小的顺序(降序)排列或按由小到大的顺序(升序)排列。,排序的对象:这些数据元素可以是数值型,也可以为字符型。若为数值型,则按数值大小排列;若为字符型,则按其ASCII码的顺序排列。,排序的依据:在实际应用中,参加排序的数据元素有时不是单个数据项,而是由多个数据项组
2、成的记录。此时排序应按照关键字的大小进行。所谓关键字是指记录中的某个数据项,用它可以标识一个记录。若此关键字可以唯一地标识一个记录,则称此关键字为主关键字;反之,把用以识别若干记录的关键字称为次关键字。,排序的稳定性:在待排序的记录中,若存在多个关键在相同 的记录,经过排序后,这些具有相同关键在 的记录之间的相对次序发生变化,则称这种 排序方法是稳定的;否则,是不稳定的。排序的分类:内部排序与外部排序 内部排序:整个排序过程完全在内存中进行.外部排序:由于待排序记录数据量太大,内存无法容纳 全部数据,排序需要借助外部存储设备才能 完成.排序算法评价:算法执行时间(最好、最差及平均情况)、需要附
3、加空间大小,1.6 排序,插入排序的基本思想:,1.6.2 插入排序,插入排序三种方法1.直接排序:认可第1个记录已排好序,然后将第2个到第n个记录依次插入到前面已排好序的记录组成的文件中。2.折半插入排序:折半插入排序在寻找插入位置时,不是逐个比较而是利用折半查找的原理寻找插入位置。待排序元素越多,改进效果越明显。3.希尔排序:将整个无序序列分割成若干个子序列分别进行直接插入排序.,将待排序文件中的记录,逐个按其排序码值的大小插入到已排好序的若干个记录组成的文件中的适当位置,保持新文件有序。,1.直接插入排序:思路:认可第1个记录已排好序,然后将第2个到第n个记录依次插入到前面已排好序的记录
4、组成的文件中。具体过程(第i个记录Ri插入到前面i-1个已排好序的记录中)将Ri的排序码与前面已排好序的排序码从右向左依次比较,找到Ri应插入的位置;将该位置以后直到Ri-1各记录顺序后移,空出位置插入Ri。,1.6.2 插入排序,直接插入排序:,次数i r0 r1 r2 r3 r4 r5 r6 r7 r8(49)39 66 96 76 11 37 50,(39 49)66 96 76 11 37 50,i=2,39,(39 49 66)96 76 11 37 50,i=3,66,(39 49 66 96)76 11 37 50,i=4,96,(39 49 66 76 96)11 37 50,
5、i=5,76,(11 39 49 66 76 96)37 50,i=6,11,(11 37 39 49 66 76 96)50,i=7,37,(11 37 39 49 50 66 76 96),i=8,50,对于有n个数据元素的待排序列,插入操作要进行n-1次,./*对N个整数进行升序排序*/for(i=1;i=0;k-)/寻找插入位置if(aiak)break;/插入到第k个位置的后面 temp=ai;for(j=i-1;jk;j-)/向后移动 aj+1=aj;aj+1=temp;,./*改进前面的算法*/for(i=1;i=0,tempaj,若降序排序,则:,1.直接插入排序:时效分析,最
6、好情况:初始排序码已经有序。共比较n-1次,移动0次。,最坏情况:待排序序列完全逆序。比较和移动均为n(n-1)/2次。,平均情况:比较和移动次数均约为n2/4,时间复杂度为O(n2)。,1.6.2 插入排序,该算法适合于n 较小的情况,时间复杂度为O(n2).,2、折半插入排序 折半插入排序在寻找插入位置时,不是逐个比较而是利用折半查找的原理寻找插入位置。待排序元素越多,改进效果越明显。,折半插入排序减少了关键字的比较次数,但记录的移动次数不变,其时间复杂度与直接插入排序相同为O(n2)。,1.6.2 插入排序,3.希尔排序,基本思想:将整个无序序列分割成若干个子序列分别进 行直接插入排序,
7、待整个序列中的记录”基本 有序”时,再对全体记录进行一次直接插入排序。子序列分割:选定两个元素之间距离h,将所有间隔为h的元素 分成一组(将相隔某个增量h的元素构成一个子系列),具体实现:,(1)选择一个增量序列t1,t2,tk,其中ti tj,tk=1。(2)按增量序列个数k,对序列进行k趟排序。(3)每趟排序,根据对应的增量ti,将序列分割成若干长度为m的子序列,分别对各子表直接插入排序。增量ti逐次减小,tk=1时,再对全部元素进行一次直接插入排序即可完成。,1.6.2 插入排序,举例:有一个含有14个数的序列,使用希而排序进行升序排序(39,80,76,41,13,29,50,78,3
8、0,11,100,7,41,86)取增量:5,3,1,h=5,39 80 76 41 13 29 50 78 30 11 100 7 41 86,(R1,R6,R11)39 29 100,(R2,R7,R12)80 50 7,(R3,R8,R13)76 78 41,(R4,R9,R14)41 30 86,(R5,R10)13 11,则子序列:39,29,100,80,50,7,76,78,41,41,30,86,13,11,R1,R2,R3,R4,R5,R6,R7,R8,R9,R10 R11,R12,R13,R14,h=5,39 80 76 41 13 29 50 78 30 11 100 7
9、 41 86,子序列:39,29,100,80,50,7,76,78,41,41,30,86,13,11,R1,R2,R3,R4,R5,R6,R7,R8,R9,R10 R11,R12,R13,R14,29 39 100,7 50 80,41 76 78,30 41 86,11 13,因此第一趟排序结果如下:29 7 41 30 11 39 50 76 41 13 100 80 78 86,对每个序列进行直接插入排序:,h=3,29 7 41 30 11 39 50 76 41 13 100 80 78 86,29 30 50 13 78,7 11 76 100 86,41 39 41 80,分
10、别对以上3个子序列,即29,30,50,13,78,7,11,76,100,86,41,39,41,80进行直接插入排序,13 7 39 29 11 41 30 76 41 50 86 80 78 100,(R1,R4,R7,R10,R13),(R2,R5,R8,R11,R14),(R3,R6,R9,R12),R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14,13 29 30 50 78,7 11 76 86 100,39 41 41 80,第二趟最终结果:,第一趟排序结果,13 7 39 29 11 41 30 76 41 50 86 80 78
11、100,h=1 序列基本有序,对其进行直接插入排序,第三趟最终结果:,7 11 13 29 30 39 41 41 50 76 78 80 86 100,第二趟最终结果:,3.希尔排序,特点:每一遍以不同间隔距离插入排序。h较大时移动数据元素是跳跃式进行。子序列每一次比较可能移去多个逆序(直接插入排序每次比较只能移去一个)。效率较高。最后一次排序(h=1)时,已基本有序,不需要多少移动。故其时间复杂度较直接插入排序低。数学难题:如何选取增量序列才能有最好的排序效果,至今未完整解决。但注意:增量序列中除1外没有公因子,且最后一个增量序列必须为1。时效分析:很难。比较次数与移动次数依赖于增量序列的
12、选取,特定情况下可以估计.,1.6.2 插入排序,对待排序记录两两比较排序码,不满足排序顺序则交换。直到任何两个记录排序码满足排序要求。,基本思路,交换排序种类:,冒泡排序快速排序,1.6.3 交换排序,1.冒泡排序基本思想:通过相邻元素的交换,逐步将线性表变成有序。基本过程:第一趟冒泡排序:首先第一个元素与第二个元素比较,逆序则 交换;然后第二个元素与第三个元素比较;直到第n-1个元素与第n个元素比较为止。结果(关键字)最大的元素放在最后位置。第二趟冒泡排序:对前面n-1个元素进行相同操作,结果 次大元素放在n-1位置上。第i趟冒泡排序:对前面n-i+1个元素进行相同操作,结 果(n-i+1
13、)中最大元素放在(n-i+1)位置上。,趟数:最多n-1,结束条件:在某一趟排序中没有进行交换元素操作。,1.6.3 交换排序,38,49,76,97,13,97,27,97,30,97,13,76,76,76,27,30,13,65,27,65,30,65,13,13,49,49,30,49,27,38,27,38,30,38,思想:小的浮起,大的沉底。,举例:将数列(8,6,5,7,1)升序排序,初始86571,第一趟65718,第二趟56178,第三趟51678,第四趟15678,初始已排好序(正序最好),则只需进行一趟排序,比较次数n-1,移动次数为0。逆序(最坏),则需进行n-1趟排
14、序,比较次数为(1+2+3+n-1)=n(n-1)/2。是稳定的排序,时间复杂度为O(n2),空间复杂度是O(1).,时效分析:,程序代码:,#define N 5int gradeN,temp;for(i=0;i gradej+1)temp=gradej+1;gradej+1=gradej;gradej=temp;,读入5个值保存在数组中,16,71,46,90,85,temp=46,temp=71,temp=16,16,71,46,90,85,i=0 第1趟,j=0 从头开始比较,j4,条件不成立,j=1,j4,条件成立,90,46,j=2,j4,条件成立,90,71,j=3,j4,90,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机应用基础课件 计算机 应用 基础 课件 1.6 排序
链接地址:https://www.31ppt.com/p-5904109.html