- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构教学课件ppt作者主编马世霞第8章排序课件.ppt
8.4.2 堆排序 8.4.2 堆排序 8.4.2 堆排序 void sift(int a[],int low,int high) /*堆排序*/ { int i=low,j=2*i; /*a[j]是a[i]的左孩子*/ int temp=a[i]; while (j=high) { if (jhigh a[j]a[j+1]) j++; if (tempa[j]) {a[i]=a[j]; /*将a[j]调整到双亲结点位置上*/ i=j; /*修改i和j值,以便继续向下筛选*/ j=2*i; } else break; /*筛选结束*/ } a[i]=temp; /*被筛选结点的值放入最终位置*/ } void HeapSort(int a[],int n) { int i,temp; for (i=n/2;i=1;i--) /*循环建立初始堆*/ sift(a,i,n); for (i=n;i=2;i--) /*进行n-1次循环,完成推排序*/ { temp=a[1]; a[1]=a[i];a[i]=temp; /*将第1个元素同当前区间内a[1]对换*/ sift(a,1,i-1); /*筛选a[1]结点,得到i-1个结点的堆*/ } } 8.4.2 堆排序 注意,没有一种排序方法的效率是在任何情况下都能独占鳌头的,具体采取哪种方法要根据实际情况而定。 假设在10000个随机的数据中找出最大的10个数,那么采用堆排序应该是最合适的,因为: 第一,经验指出堆排序是一个非常稳定的算法,在各种环境中 其效率变化不会太大; 第二,堆排序的特性决定了只要构建一棵根节点为最大数的优先队列树,然后取其前10个根节点就行了。 【例8-1】编程实现数据的排序。 8.5 二路归并排序 归并排序:多次将两个或两个以上的有序表合并成一个新的有序表。最简单的归并是直接将两个有序的子表合并成一个有序的表。 假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为2或1的有序子序列;再两两归并,如此重复,如图所示。 二路归并排序的基本操作是将两个有序表合并为一个有序表。 8.5 二路归并排序 将有序文件a[low..mid]和a[mid+1..high]归并为b[low..high]的算法 void Merge(int a[], int low, int mid, int high) /*实现一趟归并排序*/ { int b[MaxSize],i, j, k; i=low, j=mid+1, k=0; /*置初始值*/ while(i=mid j=high) { if(a[i]=a[j]){b[k]=a[i]; i++; k++;} else {b[k]=a[j]; j++; k++;} } while(i=mid) {b[k]=a[i]; i++; k++;} while(j=high) {b[k]=a[j]; j++; k++;} for(k=0,i=low;i=high;k++,i++) a[i]=b[k]; /*排序完成*/ } void Merge_Sort(int a[],int low,int high) { int mid; if(lowhigh) /*区间长度大于1*/ { mid=(low+high)/2; Merge_Sort (a,low,mid); Merge_Sort (a,mid+1,high); Merge(a,low,mid,high); } } 8.5 二路归并排序 对n个元素的表,将这n个元素看作叶结点,若将两两归并生成的子表看作它们的父结点,则归并过程对应由叶向根生成一棵二叉树的过程。 所以归并趟数约等于二叉树的高度-1,即log2n,每趟归并需移动记录n次,故时间复杂度为O(nlog2n)。 【例8-2】编程,实现二路归并排序。 8.6 基数排序 基数排序:一种借助于多关键码排序的思想,是将单关键码按基数分成“多关键码”进行排序的方法。 1.多关键码排序 2. 链式基数排序 8.6 基数排序 【例8-3】设待排序的表有10个记录,说明采用基数排序方法进行排序的过程。其关键字为{178,109,063,930,589,184,505,26
您可能关注的文档
- 数字逻辑电路测试与设计第2版教学课件ppt作者李玲第5章模数和数模转换电路课件.ppt
- 数字逻辑第2版习题答案作者武庆生数字逻辑第六章习题课件.ppt
- 数字逻辑第2版习题答案作者武庆生第三章习题课件.ppt
- 数字逻辑第2版习题答案作者武庆生第二章习题课件.ppt
- 数字逻辑第2版习题答案作者武庆生第五章习题课件.ppt
- 数字逻辑第2版习题答案作者武庆生第四章习题课件.ppt
- 数字逻辑第2版教学课件ppt作者武庆生第1章2014)课件.ppt
- 数字逻辑第2版教学课件ppt作者武庆生第2章2014课件.ppt
- 数字逻辑第2版教学课件ppt作者武庆生第2章2014)课件.ppt
- 数字逻辑第2版教学课件ppt作者武庆生第4章2014)课件.ppt
最近下载
- 幼儿园幼儿劳动教育.docx VIP
- 幼儿园幼儿劳动教育.ppt VIP
- “多彩的少数民族”民族文化介绍PPT.pptx VIP
- 高中生物虚拟仿真实验在提升学生探究能力中的应用研究教学研究课题报告.docx
- 通用版小学四年级下册综合实践活动 第8课 植物的生长与观察(课件).pptx VIP
- 啤酒厂(啤酒行业企业)安全生产风险分级管控和隐患排查治理双体系方案全套资料[全套资料汇编完整版].pdf VIP
- 2025《新课标体育与健康》水平三 篮球大单元教案(共18课时).docx
- 国家开放大学最新《工程经济与管理》形考任务(1-12)试题答案解析.docx VIP
- CECS942002建筑排水用硬聚氯乙烯内螺旋管管道工程技术规程 条文说明.pdf VIP
- 水电安装验收课件.pptx
文档评论(0)