10.1几种基本排序算法的实现_第1页
10.1几种基本排序算法的实现_第2页
10.1几种基本排序算法的实现_第3页
10.1几种基本排序算法的实现_第4页
10.1几种基本排序算法的实现_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

WordWord资料教据结构实殓掖告宾絵題目:几科基本排序算出的实现班级: 计嵌151学号: ⑸3052017一、 矣絵目的卖现直樓插入排序,药泡排序,简单选择排序,快速排序,希余排序,堆排序等6种常用部排序算法,比较各算法的比较次数和移动次数。二、 數据穗构设计⑴设计待排序记录的存储结构。⑵设计待排序数据的存儲■结构。G)输入:待排存数据的教据个数和数据可由钱盘输入,也可由程序生成伪随机数,以菜单方式选择上述排序方法中的一个,并指朗输出第几趟排序的结果。(4)输出:各趟排序结果或指定趟的排序结果,以及对应的关键字比较次数和移动次数。三、 算出段计与N巧图算法设计:编写一个主函教main(),在圭函数中设计一个简单的菜单,分别调用6种部排序算出。为了对各种排序算法的性能进行比较,算法中的主要工作是柱己知算法的适.多住置插入对关绒字的比较次数和移动次数的计数襟作。为此,可设立一个卖现排序算法中的关键字比较的函数;设立一个卖现排序算法中的关键字移动的函数;设立一个卖现排序算法中的关键字交换的函教,从而鮮决比较次数和移动次数的统计问题。教据的输入也可以通过萊单选择输入方式:键盘输入或由伪随机教程序生成数据,以便随肘灵换排序数据,并按照不同要求对排序教据进行排序,输出排序的结果以及对应的关縫字比较次数和移动次数。对于测试教据,算法中可以考虎•几组数据的典型性,如正序,逆序和不同程度等,以取得直观的感受,从而对不同算法进行比较。叫程序请車#include<iostream>usingnamespacestd;voidshowMenu()icout<<M*莱单伙"<<endl;cout<<M1・直接插入排序"vvendl;cout<<M2•冒电排序"<<endl;coutv<M3.简单產择排序"<<endl;cout<<M4•快速排序"<<endl;cout<<M5•希余排序"<<endl;cout<<M6•堆排序"<<endl;cout<<M7•退出程序"<<endl;}structSqLi$t{int伙key:intlength;};voidCreateSqList(SqList&l)//type为int{intn;cout<<M建立顺序表”vvendl<<"情输入顺序表的云度”<<endl;cin>>n;sLIength=n;si.key=newint[sl」ength+1]:cout<<输入救据:11<<endl:for(inti=1;i<=siJength;i++){cin>>$Lkey[i];}}voidCopy(SqList&LLSqList&L2){L2.length=LI.length;L2.key=newint[L1.length+1]:for(inti=1;i<=LI.length;i++){L2.key[i]=L1.key[i];}}voidOutPut(SqList&L){for(intj=l;j<=Liength;++j)cout<<L.keyD]<<cout<<endl;}voidlnsertSort(SqList&L){//对顺序表L作直接插入排序intk=0;intcompare_Time,move_Time;compare_Time=moveTime=0;for(inti=2:iv=L.length;i++){if(L.key[i]<=L・key[i•1])//”v"需将L・key[i]插入有序孑表{L.key[0]=L.key[i];〃复制为哨兵L.key[i]=L.key[i・1]:intj;for0=i-2:L.key[0]<=L.keyjj];-J)compare_Time++:L.keyD+1]=L.key[j]://记录后移move_Time++;}"L.keyU+1]=L・key[O];〃插入刊正确住.査k++;cout<<案vvk<<"越排序结,r;OutPut(L):}compare_Time++;}"cout<<"比较次数为:”vvcompareTime<<endl;cout<<"移动次数为:”vvmoveTime<<endl;}voidBubbleSort(SqLi$t&L){intk=0;intcompare_Time,move_Time;compareTime=moveTime=0;for(inti=1;ivL.length;i++)〃用i控制比较趙救共rvl趟{intt:for(intj=1;jv=L」ength・i;j++){compare_Time++;if(Lkey[j]>L.keyD+1])t=Lkey[j];L.keyD]=L.keyD+1]:L.keyD+1]=t;move_Time++;}"}k++;cout<<"第11<<k<<”趟排序结w;OutPut(L);}cout<<"比较次数为:M<<compareTime<<endl;cout<<"移动次数为:"vvmoveTime<<endl;}"intSelectMinKey(SqList&L,intn,int&compareTime){_intmin=n;intminkey;//最小值minkey=L.key[n];for(inti=n+1:i<=Liength;i++){if(L.key[i]<minkey){minkey=L.key[i];min=i;}compare_Time++;}"returnmin;}voidSelectSort(SqList&L){〃对顺序表L作简单选择排序intj;intt;intk=0;intmoveTime=0,compareTime=0;for(inti=1;iv=L」ength;i++){j=SelectMinKey(L,Lcompare_Time);//^L.key[i]-L.key[L.length]中选择最小的记录并将•其地址赋给jif(i!=j)〃文换记录{t=L.key[i];L.key[i]=L.keyjj]:L.keyD]=t;move_Time++:}_compare_Time++;k++;cout<<”弟”<<k<<”趟排序结果:h;OutPut(L):}cout<<“比较次数为:”vvcompareTime<<endl;cout<<"移动次数为:"vvmoveTime<<endl;}"intPartition(SqList&L,intlow,inthighjnt&compareTimeJnt&moveTime){//交换顺序表L中孑表key[low]・・key[high]中的记录,枢軸记录刊住,并国回其所淮.佞蓋•,〃此时疫乞之前(后)的记录均不大(小丿于乞intpivotkey;L.key[O]=L・key[low];〃用孑表的弟一个记录作相轴记录pivotkey=L・key[low];〃关键字while(lowvhigh)//从表的两端交棒向中冋扣描{compare_Time++;while(low<high&&L.key[high]>=pivotkey)-high;L.key[low]=L.key[high]:move_Time++;//^-比枢轴小的记录移至低踌while(low<high&&L.key[low]<=pivotkey)++low;L.key[high]=L.key[low]://4f比枢軸大的记录移至爲端move_Time++;}"L.key[low]=L・key[O];〃枢轴记录刊住returnlow;//遍回枢轴住}voidQSort(SqList&L.intlow.inthighjnt&&compare_Time,int&moveTime){""intmid://接收枢軸伐..炭if(low<high){mid=Partition(L、low.high,compare_Time,move_Time);k++;cout<<"第"<<k<<”趙排序结果:';OutPut(L);QSort(Llow,mid-l,k,compare_Time,move_Time)://对低孑表进行排序QSort(L,mid+Lhigh,k.compareTime,moveTime);//对為孑表进行排序}}voidQuitSort(SqList&L)〃对顺序表进行快遠排序{intk=0;intcompare_Time=0.moveTime=0;QSort(L,1,L」ength,pare_Time.move_Time);cout<<"比较次数为:n<<compareTime<<endl;cout<<"移动次数为moveTime<<endl;voidShelllnsert(SqLi$t&L.intdk,int&compareTime.int&move_Time){//对顺序表进行一越希余插入排序for(inti=dk+1;iv=L.length;i++)if(L.key[i]<=L.key[i-dk])compare_Time++;L.key[O]=L.key[i];intj:for(j=i-dk;j>0&&L.key[O]<=L.key[j];j-=dk){compare_Time++:L.keyO+dk]=L.keyfj]:move_Time++:}_L.keyp+dk]=L.keyfO];}}voidShellSort(SqLi$t&L.intdlta[],intt){intcompare_Time=0.moveTime=0;〃按增量序列dl[0]-dl[t-1]对顺序表L作冰希排序for(intk=0;k<t;k++){Shelllnsert(L.dlta[k],compareTime.move_Time);cout<<”弟"<<k+l<<11趟排序结w;OutPut(L):}cout<<"比较次数为:n<<compareTime<<endl;cout<<M移动次数为:"vvmoveTime<<endl;}voidHeapAdjust(SqList&L.ints,intm,int&compareTime,int&moveTime){//对顺序表做杳找,从值最大的舷孑结点向下笄选找刊最大值intrc=L.key[s];for(intj=2比$;jv=m;j克=2){讦(jvm&&L・key[j]<=L.keyD+1])//找刊值柯对较大的农孑结点,并依次向下{j++;}compare_Time++;讦(roL.keyDJ)break;//如果rc最丸刖推出while循环L.key[s]=L.keyjj];//最大值赋值s=j;〃交换住査move_Time++;}"L.key[s]=rc;}voidHeapSort(SqList&L){//对顺序表Lit行堆排序intvaluej;intk=0;intcompare_Time=0.moveTime=0;for(i=L.length/2;i>0;i・・)〃把L・key[1・.丄.length]调整为大顶堆HeapAdjust(L,i.L」ength.compareTime.moveTime);for(i=L」ength:i>l;-i){value=L.key[l];L.key[1]=L.key[i];L.key[i]=value;HeapAdjust(L,U-LcompareTime,moveTime);//将L・key[1…i・1]重新调整为大顶堆k++;cout<<”第”<<k<<”趙排序结果:";OutPut(L);}cout<<“比较次数为:”vvcompareTime<<endl;cout<<"移动次数为:"vvmoveTime<<endl;}"intmain(){intchoice;SqListsq.sp;CreateSqList(sq);Copy(sq.sp):showMenuf);cout<<Tleaseenteryourchoice:":dn>>choice;while(choice!=0){switch(choice)case1:lnsertSort(sq);cout<<,r最终结果:OutPut(sq);break;case2:BubbleSort(sq);cout<<"最终结果:”;OutPut(sq);break;case3:SelectSort(sq);cout<<"最终结果:,r;OutPut(sq);break;case4:QuitSort(sq);cout<<,r最终结果:";OutPut(sq);break;case5:intpn:cout<<输入增量个数:"vvendl:cin>>n;p=newint[n];cout<<输入各个增量的值:M<<endl;for(inti=0;ivn;i++){cin>>p[i];}ShellSort(sq,p.n);cout<<"最终结果:":OutPut(sq);break;case6:HeapSort(sq);cout<<"最终结果:";OutPut(sq);break;case7:cout<<M程序运行结束,退出程序。M<<endl;return0;break;}Copy(sp,sq):showMenuO:cout<<"Pleaseenteryourchoice:M;cin>>choice;}return0;}五、运行与测诚建立顺序表谙侖入顺序表的卡和输入数据:4257183:度*菜单1•直接插入:2肩泡排序•简单选择:•快速排床•希尔排序6摊排序7•退出程序龙「13“triieryo>第1摊排库结果::第2超排库结果:第2趙排序结果;比姣次逆为:14jrcr<711〉IC匕1422543754115887338楼动次数为:8最线給果:1234578SIG\WINDOWS\system32\cmd.exe5143332^441222lchoic60序序*排排召入序#序序fy P描排选排排序程r果杲果果果果:、井接泡单速尔排出ie结結结结结,結杖为*亘冒简快希堆退erl序序序序序序貯眇花1234567—曲理越趙趙趙越旳肪蜓el?.345一Iph第第第笫第第比移最u222序yo 2219t.非1H疋序择序序库2 牯M排选排排序程rl果

温馨提示

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

评论

0/150

提交评论