




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
广东金融学院实验报告课程名称:算法设计与分析课程设计实验编号及实验名称实验二 分治算法系 别应用数学系姓 名许夏梦学 号071612117班 级0716121实验地点新电605实验日期2009-9-23实验时数4指导教师骆世广同组其他成员成 绩一、 实验目的及要求1、了解用分治法求解的问题:当要求解一个输入规模为n,且n的取值相当大的问题时,如果问题可以分成k个不同子集合,得到k个不同的可独立求解的子问题,其中1kn,而且子问题与原问题性质相同,原问题的解可由这些子问题的解合并得出。那么,对于这类问题分治法是十分有效的;2、掌握分治法的一般控制流程; DanC(p,q) Global n, A1:n;integer m,p,q;/ 1pqn if Small(p,q) then return G(p,q); else m=Divide(p,q);/pmq return Combine(DanC(p,m),DanC(m+1,q); endif end DanC3、实现典型的分治算法的编程与上机实验,验证算法的时间复杂性函数。二、 实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等)使用软件:C+软件;使用实验设备:计算机:Intel(R);Pentium(R) 4 CPU 2.80GHz;2.79 GHz,0.99 GB 的内存;使用系统:Microsoft Windows XP;Professional;版本 2002;Service Pack 2.三、 实验内容及步骤(包含简要的实验步骤流程)实验内容:1、 编程实现归并排序算法和快速排序算法,程序中加入比较次数的计数功能,输出排序结果和比较次数;2、 输入10组相同的数据,验证排序结果和完成排序的比较次数;3、 与复杂性函数所计算的比较次数比较;4、 用表格列出比较结果;5、 给出文字分析。实验步骤:1、归并排序算法:void Merge(SeqList R,int low,int m,int high)/将两个有序的子文件Rlow.m)和Rm+1.high归并成一个有序的 /子文件Rlow.high int i=low,j=m+1,p=0; /置初始值 RecType *R1; /R1是局部向量,若p定义为此类型指针速度更快 R1=(ReeType *)malloc(high-low+1)*sizeof(RecType); if(! R1) /申请空间失败 Error(Insufficient memory available!); while(i=m&j=high) /两子文件非空时取其小者输出到R1p上 R1p+=(Ri.key=Rj.key)?Ri+:Rj+; while(i=m) /若第1个子文件非空,则复制剩余记录到R1中 R1p+=Ri+; while(j=high) /若第2个子文件非空,则复制剩余记录到R1中 R1p+=Rj+; for(p=0,i=low;i=high;p+,i+) Ri=R1p;/归并完成后将结果复制回Rlow.high /Merge 2、快速排序算法:void qsort(int s, int l, int r) int i, j, x; if (l r) i = l; j = r; x = si; while (i j) while(i x) j-; /* 从右向左找第一个小于x的数 */ if(i j) si+ = sj; while(i j & si x) i+; /* 从左向右找第一个大于x的数 */ if(i j) sj- = si; si = x; qsort(s, l, i-1); /* 递归调用 */ qsort(s, i+1, r); 四、 实验结果(包括程序或图表、结论陈述、数据记录及分析等,可附页)1、 归并排序算法实验结果(程序见附四-1):2、 快速排序算法实验结果(程序见附四-2):五、 实验总结(包括心得体会、问题回答及实验改进意见,可附页)通过在计算机实现归并排序算法和快速排序算法,对分治算法有了较好的理解。由于在之前的C语言、数据结构有学过快速排序算法,所以,用程序实现起来较简单。但归并算法我们从未接触过,所以会遇到较多的困难,通过调试一步步的修改错误,最终编程求出结果,在提高算法设计水平的同时我更清楚什么是分治算法了。六、 教师评语附四-11、 归并排序算法的程序代码:#include #include #include#define N 10void merge(int *a1,int a1_start,int *a2,int a2_start, int a2_end,int *a3,int a3_start,int a3_end); void merge_sort(int *a,int left,int right);/*函数功能:两个数组合并成一个数组; 函数原型:void merge(int *a1,int a1_start,int a1_end,int *a2,int a2_start,int a2_end,int *a3,int a3_start,int a3_end)函数参数:函数返回值:void */void merge(int *a1,int a1_start,int *a2,int a2_start,int a2_end,int *a3,int a3_start,int a3_end)int i,j,h,k=0;int b100; i=a2_start; j=a3_start;while(i=a2_end&j=a3_end) if(a2i=a3j) bk+=a2i+; else bk+=a3j+; while(i=a2_end) bk+=a2i+;while(j=a3_end) bk+=a3j+;for(h=0;hk;h+) a1a1_start+h=bh; void prnt(int *a,int n) int i; for(i=0;in;i+) printf(%3d,ai); printf(n);/*函数功能:使用归并排序法进行排序:从小到大;函数原型:void merge_sort(int *a,int left,int right) 函数参数:int *a:数组名,int left:排序数组的开始下标,int right:排序数组的结束下标 函数返回值:void */int s=1;void merge_sort(int *a,int left,int right,int n)int half;if(leftright)half=(int)(left+right)/2);merge_sort(a,left,half,n);merge_sort(a,half+1,right,n);merge(a,left,a,left,half,a,half+1,right);printf(n=第%d次排序=n,s+);prnt(a,n);/*main 函数*/int main()int i,n,a100=0; printf( 归并排序); printf(n=n); printf( 请输入待排序数组个数,以回车结束:n);scanf(%d,&n); printf(n 请输入待排序数组,以回车结束:n); for(i=0;in;i+) scanf(%d,&ai); printf(n=n); printf(n 初始数组:); prnt(a,n); merge_sort(a,0,n-1,n); printf(n=n); printf(n 排序结果:); prnt(a,n); getch();附四-2快速排序算法的程序代码: #include void Swap(int&a,int&b) int c=0; c= a; a=b; b=c; void disp(int a,int n) for(int i=0;in;i+) printf(%d ,ai); int partion(int a,int L,int r) int i=L-1,j=r; int v=ar; while(1) while(a+iv); while(v=j) break; Swap(ai,aj); Swap(ai,ar); return i; void quicksort(int a,int L,int r) if(L=r) return; int i; i=partion(a,L,r); quicksort(a,L,i-1); quicksort(a,i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年及未来5年中国花生休闲食品市场运行态势及行业发展前景预测报告
- 团体心理辅导保密协议书6篇
- 2025贵州省文化和旅游厅所属事业单位第十三届人博会引进人才3人模拟试卷带答案详解
- 供应链风险预警-第35篇-洞察与解读
- 2025湖南益阳市资阳区教育系统下属学校公益性岗位招聘10人考前自测高频考点模拟试题及答案详解(各地真题)
- 2025北京协和医院麻醉科合同制科研助理招聘模拟试卷及答案详解(夺冠系列)
- 2025年河北衡水冀州区公开招聘留置保障队伍辅警人员12名模拟试卷及答案详解参考
- 2025安徽淮南联合大学招聘硕士研究生及以上人才14人模拟试卷及完整答案详解一套
- 2025年河北石家庄教联高级职业中学公开招聘工作人员45名考前自测高频考点模拟试题及答案详解(各地真题)
- 班组安全生产培训目的课件
- 2025年全国中小学校党组织书记网络培训示范班在线考试题库及答案
- 产品配送方案及措施
- 教学课件正文字体设计
- 法治护航-健康成长课件
- 口令信息安全管理办法
- 护理重点专科评审解读
- 内科消化道出血诊疗规范
- 时空数据建模与预测算法-洞察阐释
- 城市污水处理厂运行承诺及保障措施
- 2025年长江引航中心招聘笔试备考题库(带答案详解)
- 压力性损伤的个案护理
评论
0/150
提交评论