减治法解决堆排序

减治法解决堆排序

ID:39090096

大小:142.00 KB

页数:9页

时间:2019-06-24

减治法解决堆排序_第1页
减治法解决堆排序_第2页
减治法解决堆排序_第3页
减治法解决堆排序_第4页
减治法解决堆排序_第5页
资源描述:

《减治法解决堆排序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、算法分析实验报告减治法-堆排序学生姓名:专业:班级:学号:指导教师:2017年6月12日8目录一、实验题目2二、实验目的2三、实验要求2四、实现过程31、实验设计:32、调试分析:73、运行结果:84、实验总结:8五、参考文献98一、实验题目减治法-堆排序二、实验目的1、了解和掌握减治法的设计思想。2、了解各种经典问题的减治思想。三、实验要求1.[问题描述]:应用堆排序方法对一个记录序列进行升序排列。2.[算法]:减治法:减治法是把一个大问题划分为若干个子问题,但是这些子问题不需要分别求解,只需求解其中的一个子问题,因而也无需对子问

2、题的解进行合并。减治法将原问题分解为若干个子问题,并且原问题(规模为n)的解与子问题(规模通常是n/2或n-1)的解之间存在某种确定的关系,这种关系通常表现为:(1)原问题的解只存在于其中一个较小规模的子问题中;(2)原问题的解与其中一个较小规模的解之间存在某种对应关系。8由于原问题的解与较小规模的子问题的解之间存在这种关系,所以,只需求解其中一个较小规模的子问题就可以得到原问题的解。减治法只对一个子问题求解,并且不需要进行解的合并。应用减治法(例如减半法)得到的算法通常具有如下递推式:T(n)={0;n=1T(n/2)+1;n>1

3、}分治法需要对分解的子问题分别求解,再对子问题的解进行合并,而减治法只对一个子问题进行求解,并且不需要进行解的合并。所以,通常来说,应用减治法处理问题的效率是很高的,一般是O(logn)数量级。四、实现过程1、实验设计:1.堆排序是利用堆得特性进行排序的方法,其基本思想是:首先将待排列的记录序列构造成一个堆,此时,堆顶记录是堆中所有记录的最大者,将它从堆中移走,然后将剩余记录再调整成堆,这样又找出了次大记录,依次类推,直到堆中只有一个记录为止。82.图解过程47352620187131047352620187131071013183

4、526472071013183526472083.算法实现void SiftHeap(int r[],int k,int n){int i,j,temp;i=k;j=2*i+1;while(jr[j])break;else{temp=r[i];r[i]=r[j];r[j]=temp;8i=j;j=2*i+1;}}}void HeapSort(int r[],int n){int i,temp;for(i=(n-1)/2;i>=0;i--)SiftHeap(r

5、,i,n);for(i=1;i<=n-1;i++){temp=r[0];r[0]=r[n-i];r[n-i]=temp;SiftHeap(r,0,n-i);}}2、调试分析:算法Sift将根结点与左右子树的根结点进行比较,若不满足堆的条件,则将根结点与左右子树根结点的较大者进行交换,所以,每比较一次,需要调整的完全二叉树的问题规模就减少一半,因此,其时间性能是O(㏒₂n)。83、运行结果:4、实验总结: 通过本次实验加深了我对减治法的理解,同时对用、减治法解决一个实际问题有了一个更深层次的认识。通过本次实验使我掌握了减治法递归的一般

6、模式,以后在解决一类问题时可以照着这个模式编写程序。通过本次试验,自己基本上掌握上述算法原理,达到实验的目的。五、参考文献[1]王红梅胡胡《算法设计与分析》(第2版),北京:清华大学出版社,2013年[2]王红梅等《数据结构(C++版)》(第2版),北京:清华大学出版社,2011年88

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。