分治法实现归并排序算法算法设计与分析试验报告_第1页
分治法实现归并排序算法算法设计与分析试验报告_第2页
分治法实现归并排序算法算法设计与分析试验报告_第3页
分治法实现归并排序算法算法设计与分析试验报告_第4页
分治法实现归并排序算法算法设计与分析试验报告_第5页
免费预览已结束,剩余4页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、算法设计与分析实验报告实验名称分治法实现归并排序算法评分实验日期年月曰指导教师姓名专业班级学号一 .实验要求1 .了解用分治法求解的问题:当要求解一个输入规模为 n,且 n 的取值相当大的问题时,如果问题可以分成 k 个不同子集合,得到 k 个不同的可独立求解的子问题,其中 1kwn,而且子问题与原问题性质相同,原问题的解可由这些子问题的解合并得出。那末,对于这类问题分治法是十分有效的。2 .掌握分治法的一般控制流程。DanQp,q)globaln,A1:n;integerm,p,q;/1pnifSmall(p,q)thenreturnG(p,q);elsem=Divide(p,q);/pm0

2、 个待排序的元素/integerlow,high;iflowhigh;thenmid/求这个集合的分割点/callMERGESORT(low,mid)/将一个子集合排序/callMERGESORT(mid+1,high)/将另一个子集合排序callMERGE(low,mid,high)/归并两个已排序的子集合/endifendMERGESORT归并两个已排序的集合procedureMERGE(low,mid,high)/A(low:high)是一个全程数组/辅助数组 B(low;high)/integerh,i,j,k;hlow;ilow;jmid+1;whilehmidandjhighdo/

3、当两个集合都没取尽时/ifA(h)midthenforkjtohighdo/处理剩余的元素/B(i)-A(k);i-i+1repeatelseforkhtomiddoB(i)-A(k);i-i+1repeatendif将已归并的集合复制到 AendMERGE2.快速排序算法QuickSort(p,q)将数组 A1:n中的元素Ap,Ap+1,.,Aq按不降次序排列,并假定 An+1是一一个确定的、且大于A1:n中所有的数。/intp,q;globaln,A1:n;ifpqthenj=Partition(p,q+1);/划分后 j 成为划分元素的位置QuickSort(p,j-1);QuickSo

4、rt(j+1,q);endifendQuicksortprocedurePARTITION(m,p)/退出过程时,p 带着划分元素所在的下标位置。/integerm,p,i;globalA(m:p-1)vA(m);im/A(m)是划分元素loop1 .归并排序#include#include#include#include#defineM11typedefintKeyType;typedefintElemType;structrecKeyTypekey;ElemTypedata;typedefrecsqlistM;classguibingpublic:guibing(sqlistb)for(i

5、nti=0;iM;i+)ri=bi;loopii+1untilA(i)looppp-1untilA(p)ifivrepeat/i 由左向右移vrepeat/p 由右向左移,A(p)/A(i)和 A(p)换位/划分元素在位置 pvoidoutput(sqlistr,intn)(for(inti=0;in;i+)coutsetw(4)ri.key;coutendl;)voidxuanze(sqlistb,intm,intn)(inti,j,k;for(i=m;in-1;i+)(k=i;for(j=i;jbj.key)k=j;if(k!=i)(rectemp=bk;bk=bi;bi=temp;)vo

6、idmerge(intl,intm,inth,sqlistr2)(xuanze(r,l,m);xuanze(r,m,h);output(r,M);inti,j,k;k=i=l;for(j=m;im&jh;k+)(if(ri.key=rj.key)(r2k=ri;i+;)else(r2k=rj;j+;)output(r2,M);)while(jh)(r2k=rj;j+;k+;)while(i=m)(r2k=ri;i+;k+;)output(r2,M);)private:sqlistr;);voidmain()(coutguibingfa1 运行结果:n;sqlista,b;inti,j=

7、0,k=M/2,n=M;srand(time(0);for(i=0;iM;i+)(ai.key=rand()%80;bi.key=0;)guibinggx(a);cout排序前数组:n;gx.output(a,M);cout数组排序过程演示:n;gx.merge(j,k,n,b);cout排序后数组:n;gx.output(b,M);cin.get();)2 .快速排序#include#include#include#include#defineMAXI10typedefintKeyType;typedefintElemType;structrecKeyTypekey;ElemTypedata

8、;);typedefrecsqlistMAXI;classkuaisupublic:kuaisu(sqlista,intm):n(m)for(inti=0;in;i+)bi=ai;)voidquicksort(ints,intt)inti;if(st)i=part(s,t);quicksort(s,i-1);quicksort(i+1,t);)elsereturn;)intpart(ints,intt)inti,j;recp;i=s;j=t;p=bs;while(ij)(while(i=p.key)j-;bi=bj;while(ij&bi.key=p.key)i+;bj=bi;bi=p

9、;output();returni;voidoutput()(for(inti=0;in;i+)coutsetw(4)bi.key;coutendl;private:sqlistb;intn;voidmain()(coutkuaisu1.cpp 运行结果:n;sqlista1;inti,n=MAXI,low=0,high=9;srand(time(0);for(i=0;in;i+)a1i.key=rand()%80;kuaisupx(a1,n);cout数组排序过程演示:n;px.quicksort(low,high);cout排序后数组:n;px.output();cin.get();五.程

10、序调试中的问题相同数字在比较的过程中会使用很多的时间,不能提高排序的速度六.实验结果1.归并排序:,:, 算法实会算法实会 分治法分治法Uebuzguibingfalexebribing工运行结果;排序前数组:232271231364214123G32散组排序过程演示:1322232371221234163642QQ008000002138用0000&0213216000068021321220000S002132122230000802132122232300阴0021321222323230000213212223232341S00213212223232341638021321222323234163640213212223232341636471排序后数组:2132122232323416364712.快速排序a%算法实会分治法 ezeaisul cjppj互行2吉果二题组排序过程演示:3?2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论