- 1、本文档共118页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[其它]数据结构10章
存储此序列的一维数组,可看成是一棵完全二叉树,则堆的定义表明:完全二叉树中所有非终端结点的值均不大于(或不小于)其左、右孩子的结点的值。完全二叉树的根结点(堆顶元素)必为序列中n个元素的最小值(或最大值)。在此定义下,树形选择排序就转化为堆排序。 例1: 序列:{96, 83, 27, 38, 11, 09} 38 11 96 83 27 09 (从小到大的堆) 堆顶元素最大的堆 例2: 序列:{12, 36, 24, 85, 47, 30, 53, 91} (从大到小的堆) 堆顶元素最小的堆 85 47 12 36 24 30 53 91 堆排序:若堆顶元素最小,则输出之。若输出堆顶元素之后,使得剩余n-1个元素的序列重又建成一个堆,则得到n个元素中的次小值,如此反复执行,便能得到一个有序序列,这个过程称之为堆排序。 堆排序需解决两个问题: ① 如何由一个无序序列建成一个堆? ② 输出堆顶元素之后,如何调整剩余元素成为一个新堆? (2)堆排序:(以堆顶元素最小为例) (3)堆排序的算法描述: 对于问题①,弗洛伊德(R.W.Floyol)给出了称为“筛选”的算法: ⅰ) n个记录的序列按层次任意构成一完全二叉树; ⅲ) 每个非终端结点与其左、右孩子比较,找出最小的作为根结点,并交换之; ⅱ) 完全二叉树的最后一个非终端结点是第?n/2?个元素,筛选只需从第?n/2?个元素开始依次往上进行; ⅳ) 如果破坏了堆的结构,则转ⅲ),直到满足堆的结构为止。 这个算法通过逐遍的筛选,把大的关键字筛到堆底。我们还是以前面例子的序列举例说明。 例:给定8个关键字的无序序列:{49, 38, 65, 97, 76, 13, 27, 49}。为直观起见,我们用完全二叉树的形式排列(实际上是一维数组),画出建堆过程。 97 76 49 38 65 13 27 49 49 76 49 38 65 13 27 97 1327 2765 沿左支筛下65 4997 筛下97 49 76 49 38 13 65 27 97 38494976 不筛 49 76 13 38 49 65 27 97 49 76 49 38 13 65 27 97 1338 3849 沿右支筛下49 2749 4965 沿右支筛下49 49 76 13 38 27 65 49 97 经4次筛选后,得新的层序序列: 第一个元素为最小的关键字,则输出之。 {13, 38, 27, 49, 76, 65, 49, 97} 对于问题②,重建新堆:若将第一个元素与最后一个元素交换,此时的新堆称为“大顶堆”。那么,重新对第1个至第n-1个元素(此例共7个)建新堆时,不必从第?(n-1)/2?个元素开始筛选,图中的堆为第2至第n-1个元素已满足堆的定义,因此只需将第1个元素筛选即可。下面我们来讨论筛选算法的实现。考虑一般性,我们从序列中的任何一个元素开始进行筛选。 (3) 筛选算法: P281 typedef SqList HeapType; // 堆采用顺序表存储表示void HeapAdjust(HeapType H, int s, int m) { // 已知H.r[s..m]中记录的关键字除H.r[s].key之外均满足 // 堆的定义,本函数调整H.r[s]的关键字,使H.r[s..m]成 // 为一个大顶堆(对其中记录的关键字而言)。 rc = H.r[s]; for (j = 2*s; j = m; j *= 2) { // 沿key较大的孩子结点向下筛选 if (j m LT(H.r[j].key, H.r[j+1].key)) + + j; // j为key较大的记录的下标 if (!LT(rc.key, H.r[j].key)) break; //rc应插入在位置s上 H.r[s] = H.r[j]; s = j; } // for H.r[s] = rc; // 插入} // HeapAdjust (4) 堆排序算法: P282 void HeapSort(HeapType H) { // 对顺序表H进行堆排序。 for (i = H.length/2; i 0; --i)
您可能关注的文档
- [其它]03 Modeling and simulation of Physical systems.ppt
- [其它]01_景观设计概述.ppt
- [其它]04章_多组分系统热力学.ppt
- [其它]10万吨蔬菜深加工与天然色素提取项目可研正文.doc
- [其它]11 植物分类学概述.ppt
- [其它]1税法概论.ppt
- [其它]2011-3关税制度01章本-海关税收导论.ppt
- [其它]2011年1月自考政治经济学试题答案网友版.pdf
- [其它]2011年9月计算机二级Access笔试试题思路版.doc
- [其它]2012专插本管理学大纲归纳.doc
- 北师大版小学数学三年级上册《寄书》教学设计.docx
- 统编版(部编版)语文二年级上册《雪孩子》教学设计.docx
- 统编版(部编版)语文二年级上册《八角楼上》教学设计.docx
- 北师大版小学数学三年级上册《长方形周长》教学设计.docx
- 北师大版小学数学三年级上册《丰收了》教学设计.docx
- 统编版(部编版)语文二年级上册《夜宿山寺》教学设计.docx
- 统编版(部编版)语文二年级上册《风娃娃》教学设计.docx
- 统编版(部编版)语文二年级上册《朱德的扁担》教学设计.docx
- 统编版(部编版)语文二年级上册《难忘的泼水节》教学设计.docx
- 统编版(部编版)语文二年级上册《纸船和风筝》教学设计.docx
最近下载
- 常微分方程(第4版)王高雄教材习题详解.pdf
- GB50416-2017 煤矿井下车场及硐室设计规范.docx
- 部编版《道德与法治》一年级上册第2课《拉拉手交朋友》优秀课件.pptx
- 消费者行为学(上海外国语)中国大学MOOC慕课 客观题答案.docx
- 2024年秋季新人教道德与法治一年级上册全册课件(新版教材).pptx
- 中国老年心肺复苏急诊专家共识(2024)解读PPT课件.pptx VIP
- 幼儿园中班科学《数高楼》 课件.pptx VIP
- 洗洁精中的化学科普知识(课件)小学生拓展通用版.pptx
- SONYHDRXR260E中文操作说明书.pdf
- 新注册(备案)医疗器械耗材如何加入国家医保局目录新增编码和流水号.docx
文档评论(0)