下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验1 归并排序分治策略的设计与实现一、实验目的1、熟悉分治法求解问题的抽象控制策略;2、熟悉在顺序存储表示下求解分类问题的递归算法设计;3、通过实例转换, 掌握分治法应用。二、实验内容1、学习分治方法的原理 ;2、针对分治问题设计递归算法实现归并排序算法;3、根据归并排序的递归算法改写成迭代算法。4、测试程序与验收并进一步将程序改写成模块化可用程序。三、实验程序的功能模块【模块】void Merge(int r,int r1,int s,int m,int t) 实现数组中的已分好类的两部分进行合并 void MergeSort(int r,int r1,int s,int t) 对数组中从
2、下标low开始到heigh结束的部分进行分类 【递归实现】/合并数组void Merge(int r,int r1,int s,int m,int t) / r为待排序数列 r1用来存放排好序的数列 三个int型变量 s m t ,分别为数组的最左,中间,最右 int i=s;int j=m+1;int k=s; while(i=m & j=t) if(ri=rj) /左右两边的数组从头开始比,选择小者放入r1r1k+=ri+; else r1k+=rj+; if(i=m) /若比完之后,左边有剩下,依次填入r1 while(i=m) r1k+=ri+; else /比完之后,右边有剩下,依次
3、填入r1while(j=t) r1k+=rj+; for(int l=0;lt-s+1;l+) /复制会原数组,此步骤可省去 rl=r1l; /归并算法void MergeSort(int r,int r1,int s,int t) /结束归并条件,数组内只有一个元素if(s=t) r1s=rs; else int m=(s+t)/2; /规定变量m,数组中间 MergeSort(r,r1,s,m); /左边归并MergeSort(r,r1,m+1,t); /右边归并Merge(r1,r,s,m,t); /合并【迭代实现】/合并算法 sort为合并后数组,list为待合并数组,low,cent
4、er,high分别为待合并数组的最左边,中间,最右边void merge(int *sort, int *list, int low, int center, int high) int i,j,k; /i,j分别代表两个小数组的最左边,通过比较,选择小者放入合并后数组for(i=low,j=(center+1),k=low; i=center & j listj) /若左边数组大,放右边数组未用的最左边的元素进sortsortk = listj+; else sortk = listi+; while(i=center) /若左边数组还有元素,依次填入sortsortk+ = listi+;
5、 while(j=high) /若右边数组还有元素,依次填入sortsortk+ = listj+; /每次步长分组 a是分组后数组,b是待分组数组,length为步长(小组长度),n为大数组总长void merge_pass(int *a, int *b, int length, int n) int i; /从数组最左边开始,按照步长分组,直到不够元素达到步长可以分组(剩最后一组)for(i=0; i=n-2*length; i+=2*length) int center = (i + i + 2*length - 1)/2; /定义每个小组的中间merge(a, b, i, center
6、, i+2*length-1); /每个小组调用合并算法,最左边就是i,最右边是i+2*length-1 if(i+length)n) /最右边的一个分组,若此组最右边还未到达大数组最右边(此数组长度大于步长) int center = (i + i + 2*length - 1)/2; /定义此小组的中间merge(a, b, i, center, n-1); /调用合并算法,最右边是n-1 else /最后一个分组不够元素达到步长,复制 while(in) ai = bi; +i; /归并算法 array 为待排序数组,n为数组长度void m_sort(int *array, int n
7、) int extra30; int length = 1; while(length n) /以步长为分的标准 /分组归并,结果放到extramerge_pass(extra, array, length, n);/步长增长为两倍length *= 2; /再次分组归并,结果放回arraymerge_pass(array, extra, length, n); length *= 2; 四、递归算法改写成迭代算法的一般方法1、递归一般分为三部分,开始状态,一般状态,结束状态。递归调用的过程一般可以用循环代替。两者的开始状态是一样的,结束条件也是一样,循环需要一个变量衡量结束,可以是递归里的返
8、回变量把每步递归的操作移植到每步循环操作。以下是例子。递归 Fun(x)If(结束条件) Return;Else 每步递归操作; Fun(变量变化)迭代For(开始状态;结束状态;变量变化) 每步迭代操作。五、C+阐述分治法递归抽象控制策略问题p,子问题p,合并merge(),简单解决ADHOc(P)void fun(p)if(p=n0)return (ADHOc(P);elseDivide p into p0pk;For(i=0;ik;i+)Fun(pi);Merge();六、思考题1、应用分治法抽象控制策略实现快速分类。解答:先分大类,再分小类,再分细节,层层细分。如单词appeal,先按照第一个字母分类放进开
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度教育培训合同:教育机构与学员就教育培训服务达成的一致协议包括培训内容、时间、费用等
- 草耙手动的市场需求与消费特点分析
- 2024年度城市基础设施建设与委托管理合同
- 2024年度广告代理合同:国际品牌在中国市场的广告代理
- 轻型货车市场发展预测和趋势分析
- 2024年度新能源产业材料采购合同
- 2024年度报关代理及清关服务合同
- 2024年度无人机监控设备采购与安装合同
- 2024年度出版合同的出版内容与出版数量
- 胸衣市场发展现状调查及供需格局分析预测报告
- 第47届世界技能大赛江苏省选拔赛网络系统管理项目技术文件V1.1
- 中学生养成良好学习习惯和行为习惯的主题班会
- 2024年城市地下综合管廊照明工程合同
- 上海市莘庄中学等四校联考2025届高二物理第一学期期中检测试题含解析
- 【沪科】第三次月考卷
- GB/T 44351-2024退化林修复技术规程
- 第5单元 圆 单元测试(含答案)2024-2025学年六年级上册数学人教版
- 第10课《我们不乱扔》(课件)-部编版道德与法治二年级上册
- 2024人教版新教材初中地理七年级上册内容解读课件(深度)
- 2024版《供电营业规则》学习考试题库500题(含答案)
- MOOC 自然保护与生态安全:拯救地球家园-暨南大学 中国大学慕课答案
评论
0/150
提交评论