- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * * 第7章 排序 §7.1 引子 ?排序是很常见的一类问题(并不局限于排序本身) [例7.1] 有1亿个随机给出的浮点数,请找出其中最大的1万个。 方法1: 简单选择法 ? 总比较次数为N-1+(N-2)+…+(N-10000)次。当N为1亿时,大约为1万亿次。 “分而治之” 方法2: ? 比如,以1百万为一个块,分为100块,分别对这100块数据进行排序。由于只需要得到最大的1万个数,故每块排完后可以只要前1万个数,再从这100块共100万个数中取最大的1万个就可以了。 ? 当N为100万时,O(NlogN)是2000万,所以求解101块百万数据的排序问题,时间大约是20亿次运算。 堆选择 方法3: ? 先读出1百万个数,建立初始堆(100万运算量),对剩下的近1亿个数进行过滤:每次读入剩下的一个数,如果该数小于等于这1万个数的最小值,则继续读下一个数;否则,用该数替代1万个数里的最小值。 ? 100万(1百万建堆)+ 1亿(顺序过滤)+ 14 * 1千万,共约2.4亿。 (1万亿) (20亿) (2.4亿) N=1亿,log10000=14 过滤所有数据需要 14亿? No! 随机数将使得绝大多数 很快被排除!比如只有 大约1/10需要替换。 第7章 排序 §7.2 选择排序 ?简单选择排序 ? 时间复杂性 T(n) = O(n2) ? 空 间复杂性S(n) = O(1) ? 稳定性:不稳定。反例如下: 2 2 1 1 2 2 不稳定! 排序前 2 领先于 2 2 落后于 2 排序后 ? 堆排序的核心思想是:利用最大堆(或者最小堆)输出堆顶元素,即最大值(或最小值),将剩余元素重新生成最大堆(或者最小堆),继续输出堆顶元素,重复此过程,直到全部元素都已输出,得到的输出元素序列即为有序序列。 ?堆排序(属于选择排序大类) 对初始已经有序的序列 没有实质性的省时间优势。 99 66 45 37 10 33 22 13 99 13 66 45 37 10 33 22 99 66 37 45 13 10 33 22 第7章 排序 §7.2 堆排序 〖例〗 花了logN的时间搞定了最大元素。以后类似可以搞定第二大、第三大…元素。 一次性花O(N)的时间建立成最大堆。 从根往较大孩子方向渗透到合适位置。 void Adjust( ElementType A[], int i, int N ) { /* 对A[]中的前N个元素从第i个元素开始向下迁移调整 */ int Child; ElementType temp; for( temp = A[i]; (2*i + 1) N; i = child){ Child = (2*i + 1); /* 左孩子节点 */ if ( (Child != N-1) A[Child + 1] A[Child]) Child++; /* Child指向左右子结点的较大者 */ if( temp A[Child] ) A[i] = A[Child]; /* 移动Child元素到上层 */ else break; } A[i] = temp; /*将temp放到当前位置 */ } void HeapSort( ElementType A[], int N ) /* 堆排序 */ { int i; ElementType temp; for( i = (N-1)/2; i = 0; i-- ) /*从有儿子的最后一个结点开始*/ Adjust(A, i, N); /* 建立最大堆*/ for( i = N-1; i 0; i-- ){ /* 将堆顶元素A[0]与当前堆的最后一个元素A[i]换位 */ temp = A[0]; A[0] = A[i]; A[i] = temp; /* 将有i个元素的新堆从根结点向下过滤调整 */ Adjust(A, 0, i); } } 与DeleteMax( MaxHeap H )类似。 第7章 排序 §7.2 堆排序 第7章 排序 §7.2 选择排序 ? 时间复杂性 T(n) = O(nlogn) ? 空 间复杂性S(n) = O(1) ? 稳定性:不稳定。反例如下: 不稳定! 排序前 2 领先于 2 2 落后于 2 排序后 ? 堆排序(属于选择排序大类) 2 1 2 1 2 2 2 1 [1] [2] 2 [3] 2 1 [1
您可能关注的文档
- patran学习patran基础教程13_视窗.pdf
- 呼吸系统常见疾病用药-蔡慧敏.ppt
- 2007年北京师范大学辅导员笔试题.pdf
- 2005年上半年信息系统项目管理师考试上午案例分析写作题目与解析.pdf
- 10-641份ppt版本生物医药大分子ppt绘图素材库信号通路1 11616.ppt
- hit专家网news - 2017-08-15飞医网获4000万a轮融资瞄准万亿医疗供应链市场.pdf
- ppt文件杂类邯郸学院说明会.ppt
- 北科大金属工艺学教学课件09本科11.ppt
- suc实战docker到kubernetes技术系列视频教程09 kubernetes架构深度解析09.pdf
- 00课前学习材料及课程表32言语-中心理解题3.pdf
- 2025年清原满族自治县辅警招聘考试真题汇编推荐.docx
- 2025湖南湘潭市市直机关遴选公务员32人考试备考题库附答案.docx
- 2025年茂名职业技术学院辅导员考试参考题库附答案.docx
- 2025年智能垃圾分类回收系统产业链协同及盈利模式创新报告.docx
- 2025年智能垃圾分类回收系统市场进入策略报告.docx
- 2025年智能垃圾分类回收政策环境与行业发展趋势报告.docx
- 小学科学细胞核3D打印尺寸稳定性研究课题报告教学研究课题报告.docx
- 初中历史教学中的时空观念与历史思维能力培养路径探索教学研究课题报告.docx
- 2025年服装店商业计划书范文.docx
- 生鲜农产品配送商业计划书图文.docx
原创力文档


文档评论(0)