(数据结构)第9章排序--2详解.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十章 排序(Sort) 目录 §10.1 排序概述 §10.2 插入排序 §10.3 交换排序 §10.4 选择排序 §10.5 归并排序 §10.6 基数排序 §10.4 选择排序 10.4.1 简单选择排序 10.4.2 堆排序 简单选择排序算法思想: 设:排序区间R[1..n]; 在排序的过程中,整个排序区间被分为两个子区间:有序区R[1..i-1]和无序区R[i..n]; 共进行n-1趟排序,每趟排序都是选择无序区的最小记录Rmin;将Rmin与无序区的第一条记录位置互换,使得无序区长度减1,有序区长度增1。 简单选择排序算法: void SelectSort( SqList L ) { //对顺序表L作简单选择排序 for(i=1; iL.length; i++){ min=i; for(j=i+1;j=L.length;j++) //选最小的记录 if(L.R[j].keyL.R[min].key)min=j; if(i!=min)L.R[min]?L.R[i]; //与无序区第一条记录交换 }//end for } 简单选择排序性能分析: 比较次数与表的初态无关: 最好的情况:表的初态恰好是正序排列 移动次数:Mmin=0 最坏的情况:每趟都有移动发生 移动次数:Mmax=3(n-1) 平均O(n2), 不稳定的排序方法 §10.4 选择排序 10.4.1 简单选择排序 10.4.2 堆排序 10.4.2 堆排序(Heap Sort ) 用建堆的方法来选择待排序区间的最大或最小键值。 一、堆定义 二、筛选操作 三、建堆算法 四、堆排序算法 一、堆定义 设n个元素的有限序列: K1, K2, K3, ... , Kn 如果满足 Ki≤K2i Ki≤K2i+1 其中1≤i≤?n/2? 则称这个序列为小根堆或小顶堆; 如果满足 Ki≥K2i Ki≥K2i+1 其中1≤i≤ ?n/2? 则称这个序列为大根堆或大顶堆; 回顾完全二叉树的性质, 编号为i的结点, 其左孩子的编号为2i, 右孩子的编号为2i+1 如果将堆序列看成完全二叉树的按层次遍历序列 则这棵完全二叉树上每个结点的值比左孩子和右孩子值都要大(大根堆), 或比左孩子和右孩子值都要小(小根堆)。 二、筛选操作 前提:根结点的左、右子树都是堆,而根结点不满足堆条件; 将根调整到合适的位置,使得整个序列成为堆。 三、建堆 将一个任意序列建成一个小根堆或大根堆; 自下而上、自右向左地进行筛选,将以每一个非终端结点为根的子树筛选成堆; 具有n个结点的完全二叉树有?n/2?个叶子结点,一个叶子就是一个堆。 完全二叉树最后一个非终端结点的编号为?n/2?; 四、堆排序 以大顶堆为例: 堆顶是排序区间最大的元素 去掉堆顶,将堆顶与堆的最后一个元素交换位置: ①最大元素归位; ②新树根不满足堆定义,需要通过筛选调整为堆 第十章 排序(Sort) 目录 §10.1 排序概述 §10.2 插入排序 §10.3 交换排序 §10.4 选择排序 §10.5 归并排序 §10.6 基数排序 归并排序(Merging sort)算法思想: 一种基于将两个有序表异地归并成一个有序表的排序策略。 初态是将排序表中的每个元素看成是一个有序的子表,共有n个子表。 25 57 48 37 12 92 86 72 31 48 [25] [92] [48] [37] [12] [57] [86] [72] [31] [48] 经过一趟排序,将两个相邻的有序子表归异地并成一个有序子表; 共进行log2n趟这样的归并,整个排序表就被归并成了一个有序表。 25 92 48 37 57 92 86 72 31 48 R: {25}{92}{48}{37}{12}{57}{86}{72}{31}{48} T: {25 92} {37 48} {12 57} {72 86} {31 48} R: {25 37 48 92} {12 57 72 86} {31 48} T: {12 25 37 48 57 72 86 92} {31 48} R: {12 25 31 37 48 48 57 72 8

文档评论(0)

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

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

1亿VIP精品文档

相关文档