- 1、本文档共38页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第3章 基于比较的排序算法1什么是基于比较的排序 2插入排序 3合并排序 7堆排序 15快排序 28
2什么是基于比较的排序排序是把输入的n个数,A[1],A[2],…,A[n],重排为一个递增序列或递减序列。因为对称性,只考虑排序为递增序列,A[1]?A[2]?…?A[n]。基于比较是指,用比较输入数字之间大小的方法来决定它们的大小顺序。不允许用数字的其它结构性特征来帮助排序,例如数字A[i](1?i?n)有几位,每一位的数值是多少,等等。
32. 插入排序这是一个简单的用贪心法的算法。思路是:初始: 把一个数,A[1],排好序,(不需操作)第1步: 把两个数,A[1],A[2],排好序,第2步: 把三个数,A[1],A[2],A[3],排好序,……例如: (方框是下一步要插入的数)初始: 5 3 4 2 1第1步后: 3 5 4 1 2第2步后: 3 4 5 1 2第3步后: 1 3 4 5 2第4步后: 1 2 3 4 5
4插入排序伪码Insertion-sort(A[1..n])ifn=1 thenexitendiffork←2ton x←A[k] j←k–1 whilej0andA[j]x A[j+1]←A[j] //A[j]比x大,向后挪一位 j←j-1 endwhile //如果j=0,则有xA[1] A[j+1]←x //把x插入到A[j+1]。如j=0,也正确endfor End
5???
6插入排序的优缺点缺点:复杂度较高,后面会介绍?(nlgn)的算法。优点:算法简单,实现容易。是稳定(stable)排序,即序列中任意两个相等的数在排序后不改变它们的相对位置。是就地操作的算法,即只需要使用常数个除输入数据所占空间以外的存储单元。除数组A[1..n]以外,插入排序只需要指针k、指针j和临时工作单元x。
7用分治法把序列一分为二递归地将两子序列排序用合并算法把排好序的两个子序列合并为一个单一序列先讨论合并算法,再讨论排序算法。假设A[1..n1]和B[1..n2]分别为两个递增序列,即 A[1]?A[2]?A[3]?…?A[n1] B[1]?B[2]?B[3]?…?B[n2]合并算法把它们合并为一个排好序的单一序列。 合并后的序列存入数组C[1..n1+n2],并有: C[1]?C[2]?C[3]?…?C[n1+n2](伪码见下页)3. 合并排序
8Merge(A[1..n1],B[1..n2],C[1..n1+n2])i←j←k←1whilei?n1andj?n25 ifA[i]?B[j]6 then C[k]←A[i],i←i+18 else C[k]←B[j],j←j+110 endif11 k←k+112 endwhileifin1 //说明序列A里的数已全部放入序列C中 thenC[k..n1+n2]←B[j..n2] //B中剰余数放入C中15 elseC[k..n1+n2]←A[i..n1] //否则,A中剰余数放入C中16 endifEnd合并算法复杂度(最坏情况):T(n)=n–1=n1+n2–1次比较。
9合并排序:Mergesort(A[p..r]) //如果p=r,则是底的情况,不需任何操作1 ifpr2 then mid←?(p+r)/2?3 Mergesort(A[p..mid])4 Mergesort(A[mid+1..r])5 Merge(A[p..mid],A[mid+1..r],C[p..r])6 A[p..r]←C[p..r])7 endifEnd//调用Mergesort(A[1..n])后可排序A[1..n]显然,前面的合并算法Merge(A[1..n1],B[1..n2],C[1..n1+n2])需要稍加修改。主要是各数组两端的序号必须是变量,不能总是从1开始。但这种修改极为容易,不在此赘述了。当我们需要将数组A[1..n]排序时,只需调用Mergesort(A[1..n])即可。
10二叉树表示合并排序合并排序的递归过程可以用一棵二叉树来表示。其划分的顺序是从根开始,自上而下,与树的前向遍历一致,而合并的顺
您可能关注的文档
- 计算机算法基础 第2版 课件 第1章 概述.pptx
- 计算机算法基础 第2版 课件 第2章 分治法.pptx
- 计算机算法基础 第2版 课件 第4章 不基於比较的排序算法.pptx
- 计算机算法基础 第2版 课件 第5章 中位数和任一顺序数的选择.pptx
- 计算机算法基础 第2版 课件 第6章 动态规划.pptx
- 计算机算法基础 第2版 课件 第7章 贪心算法.pptx
- 计算机算法基础 第2版 课件 第8章 图的周游算法.pptx
- 计算机算法基础 第2版 课件 第9章 图的最小支撑树.pptx
- 计算机算法基础 第2版 课件 第10章 单源最短路径.pptx
- 计算机算法基础 第2版 课件 第11章 网络流.pptx
- 2025年贵州工业职业技术学院高职单招高职单招英语2016-2024历年频考点试题含答案解析.docx
- 2025年西昌民族幼儿师范高等专科学校高职单招职业适应性测试近5年常考版参考题库含答案解析.docx
- 2025年西藏警官高等专科学校高职单招语文2018-2024历年参考题库频考点含答案解析.docx
- 2025年贵州工商职业学院高职单招职业技能测试近5年常考版参考题库含答案解析.docx
- 2025年贵州工商职业学院高职单招职业适应性测试近5年常考版参考题库含答案解析.docx
- 2025年贵州农业职业学院高职单招数学历年(2016-2024)频考点试题含答案解析.docx
- 2025年贵州工商职业学院高职单招高职单招英语2016-2024历年频考点试题含答案解析.docx
- 2025年贵州工商职业学院高职单招语文2018-2024历年参考题库频考点含答案解析.docx
- 2025年许昌职业技术学院高职单招数学历年(2016-2024)频考点试题含答案解析.docx
- 2025年许昌职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析.docx
文档评论(0)