10-第三章基本排序-7讲.pptVIP

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
10-第三章基本排序-7讲

回 顾 3.1 查找 顺序查找 对分查找 分块查找 哈希查找 O(n) O(log2n) O(log2(m+1)+n/m) O(1) 3.3 排序 交换排序 插入排序 选择排序 堆排序 二叉排序树 1. 排序△ △:将一个无序序列整理成按值非递减顺序排列的有序序列。 排序可以在不同的存储结构上实现。 基本排序是在顺序存储的线性表中实现的; 二叉排序树利用二叉树的链式存储结构实现无序表的有序化。 三种基本排序方法: 交换排序 (如 冒泡排序和快速排序); 插入排序 (如 简单插入排序和希尔排序); 选择排序 (如 简单选择排序和堆排序); 2. 交换排序 交换排序的基本思想: 两两比较待排序记录的关键值,并交换不满足顺序要求的偶对,直至全部满足为止。 交换排序的两种形式 冒泡排序 快速排序 2.1 冒泡排序 冒泡排序的基本过程: (1) 从表头开始向后扫描,依次比较相邻元素。如果为“逆序”,进行互换。一次扫描后,最大元素排到表末端; (2)从后先前扫描剩下的线性表,依次比较相邻元素,如有“逆序”,进行互换。一次扫描后,最小元素排到表前端; (3)对剩下的线性表重复过程(1)(2),直到消除了所有的逆序。 最坏情况下的时间复杂度(工作量)为O(n(n-1)/2). 2.2 快速排序 快速排序的提出 冒泡排序只能在扫描过程中对相邻两个元素进行比较,消除一个逆序。 能否找到一种办法,通过一次交换来消除线性表中的多个逆序,从而大大加快排序的速度。 快速排序基本思想 从线性表中选取一个元素设为T。然后将线性表后面小于T的 元素移到前面,而前面大于T的元素移动到后面,这样将线性表分成两部分,即进行了一次线性表的分割。 对分割后的各子表再按上述原则进行分割,一直到所有子表为空,即完成线性表的排序过程。 最坏情况下的时间复杂度(工作量)为O(n(n-1)/2). 2.3 快速排序的算法实现 实现步骤 首先,在表的第一个、中间一个或最后一个元素中选取中间项赋予T,设为P(k),再将表中第一个元素移到P(k)位置。 设置两个指针i和j分别指向表的起始与中止位置,反复操作以下两步: (1) 将j指针逐渐减小,并逐次比较P(j)与T,直到发现一个P(j)T为止,将P(j)移到P(i)的位置上; (2)将i指针逐渐增大,并逐次比较P(i)与T,直到发现一个P(j)T为止,将P(i)移到P(j)的位置上; 上述操作交替进行,直到指针i和j指向同一个位置(i=j)为止。 3 简单插入排序 简单插入排序基本思想 把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。 把a[i]插入到a[0],a[1],...,a[i-1]之中的具体实施过程为:先把a[i]赋值给变量t,然后将t依次与a[i-1],a[i-2],...进行比较,将比temp大的元素右移一个位置,直到发现某个j(0=j=i-1),使得a[j]=t或j为(-1),把t赋值给a[j+1]。 最坏情况下的时间复杂度(工作量)为O(n(n-1)/2). 4 简单选择排序 1. 简单选择排序基本思想 每次从待排序的记录中选出关键字最小(或最大)的记录,顺序放在已排序的记录序列的最后,直到全部排完为止。 2. 基本步骤: 首先在所有的记录中选出键值最小的记录,把它与第一个记录交换,然后在其余的记录中再选出键值最小的记录与第二个记录交换,依次类推,直到所有的记录排序完成。 第i趟在?n-i+1(i=1,2,...n-1)个记录中选择键值最小的记录作为有序序列的第i个记录。 最坏情况下的时间复杂度(工作量)为O(n(n-1)/2). 5. 堆排序 1. 堆定义: 或 2. 堆的表示 一维数组表示 完全二叉树表示 堆顶元素为n个元素中的最大项 是一种选择排序 5.1 堆举例 例: (91,85,53,36,47,30,24,12) 5.2 构造一个堆 堆构造 如以完全二叉树形式表示, 从最后一个非叶子结点(第n/2个 元素)开始,直到第一个元素为止,逐步进行调整建堆,最后就能够得到与此序列对应的 堆。 例: ( 47, 91, 53, 85, 30, 12, 24, 36) 5.3 堆排序步骤 1.首先,将无序序列以完全二叉树表示; 2.将给定的 无序序列构造堆 ; 3.将堆顶元素与堆

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档