ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:19.78KB ,
资源ID:7618174      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7618174.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构试验报告各种内排序算法的实现及性能比较.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构试验报告各种内排序算法的实现及性能比较.docx

1、数据结构试验报告各种内排序算法的实现及性能比较实 验 报 告( 2010 / 2011 学年 第 2 学期)课程名称数据结构使用C+语言描述实验名称各种内排序算法的实现及性能比较实验时间2011年5月27日指导单位计算机科学与技术系指导教师学生姓名班级学号学院(系)专 业实验名称各种内排序算法的实现及性能比较指导老师实验类型设计实验学时4实验时间2011.5.27一实验目的和要求内容:验证教材的各种内排序算法。分析各种排序算法的时间复杂度。要求:使用随机数产生器产生大数据集合,运行上述各种排序算法,使用系统时钟测量各算法所需的实际时间,并进行比较。二实验环境(实验设备)Visual C+6.0

2、三实验原理及内容/selectsort.h#include /简单选择排序template void SelectSort(T A, int n) int small; for (int i=0; in-1; i+) /执行n-1趟 small=i; for(int j=i+1;jn;j+) if(AjAsmall)small=j; Swap(Ai,Asmall); Insertsort.h#include /直接插入排序template void InsertSort(T A, int n) for(int i=1; i0&tempAj-1) Aj=Aj-1;j-; Aj=temp; /*o

3、k!*/Bubblesort.h#include template void BubbleSort(T A, int n) int i,j,last; i=n-1; while(i0) last=0; for(j=0;ji;j+) if(Aj+1Aj) Swap(Aj,Aj+1); last=j; i=last; Quicksort.h#include /改进的快速排序templatevoid quick(T A,int n) int *a; /用数组保存待排序的子序列的上、下界 int top=0,right,left,j; /left和right为待排序 a=new intn; if(a=

4、NULL) return; atop+=0; atop+=n-1; /以初始序列为待排序序列开始改进的快速排序 /lc for(j=0;aj!=NULL;j+) /循环到数组元素为空 left=aj+; right=aj; /每次按序从数组中取出两个元素作为待排序序列的上、下界 if(leftright) Swap(left,right); /如果下界大于上界,交换上、下界 if(right-left15) InsertSortExt(A,left,right); /若元素较少调用插入排序 else atop+=left; atop+=QuickSort(A,left,right)-1; at

5、op+=atop-2+2; atop+=right; /否则将低、高端序列上、下界依次保存到数组中 templateint QuickSort(T A,int left,int right) /用于改进的快速排序的原始快速排序方法 int i,j; if(leftright) i=left;j=right+1; do do i+;while(AiAleft); if(ij)Swap(Ai,Aj); while(ij); Swap(Aleft,Aj); return j; return 0;templatevoid InsertSortExt(T A,int left,int right)/用于

6、快速排序的直接插入排序方法 for(int i=left+1; i0 & tempAj-1) /从后往前查找插入位置 Aj=Aj-1; j-; /Aj-1元素后移,j指针前移 Aj=temp; /待插入元素存入找到的插入位置 Mergesort.h#include /两路合并的C+程序template void Merge(T A,int i1,int j1,int i2,int j2) / i1,j1是子序列1的下、上界,i1,j2是子序列2的下、上界 T *Temp=new Tj2-i1+1; /分配能存放两个子序列的临时数组 int i=i1,j=i2,k=0; /i,j是两个子序列的游

7、动指针,k是Temp的游动指针 while(i=j1&j=j2) if(Ai=Aj)Tempk+=Ai+; else Tempk+=Aj+; while(i=j1)Tempk+=Ai+; while(j=j2)Tempk+=Aj+; for(i=0;ik;i+)Ai1+=Tempi; delete Temp; /合并排序的C+程序template void MergeSort(T A, int n) int i1,j1,i2,j2; /i1,j1是子序列1的下、上界,i2,j2是子序列2的下、上界 int size=1; /子序列中元素个数,初始化为1。 while(sizen) i1=0;

8、while(i1+sizen-1) j2=n-1; else j2=i2+size-1; Merge(A,i1,j1,i2,j2); i1=j2+1; size*=2; Heapsort.h#include /AdjustDown函数template void AdjustDown(T A, int r, int j) int child=2*r+1; T temp=Ar; while(child=j) if(childj)&(Achild=Achild)break; A(child-1)/2=Achild; child=2*child+1; A(child-1)/2=temp;/堆排序的C+

9、程序template void HeapSort(T A, int n) for(int i=(n-2)/2; i-1; i-) AdjustDown(A,i,n-1); /构造最大堆 for(i=n-1; i0; i-) Swap(A0,Ai); AdjustDown(A,0,i-1); Meau.h#include #include #include #include #include selectsort.h#include insertsort.h#include bubblesort.h#include quicksort.h#include mergesort.h#include

10、heapsort.h#define SIZE 400#define TIMES 1000template class Menupublic: void printmenu(); void selectsort();/简单选择排序 void insertSort();/直接插入排序 void bubbleSort();/冒泡排序 void quickSort();/快速排序 void mergeSort();/两路合并排序 void heapSort();/堆排序 void childmenu();/子菜单1 void childmenu2();/子菜单2 void switcha();priv

11、ate: int a,b,c;template void Menu:printmenu() cout-endl; cout 内排序测试系统 endl; cout-endlendlendl; cout1.简单选择排序endl;/ok cout2.直接插入排序endl;/ok cout3.冒泡排序endl;/ok cout4.快速排序endl;/ok cout5.两路合并排序endl;/ok cout6.堆排序endl;/ok cout7.退出endl; coutPS:测试用的数组元素为SIZE时间为重复运行TIMES次的时间(包括了产生数据与析构的时间)switcha();template vo

12、id Menu:childmenu() cout-endl; cout1.最好情况endl; cout2.最坏情况endl; cout3.平均情况endl; cout4.返回主菜单b; if(b=4)this-printmenu();templatevoid Menu:childmenu2() cout-endl; cout1.原始算法endl; cout2.改进算法endl; cout3.返回主菜单c; if(c=3)this-printmenu();template void Menu:switcha() /coutoka; switch(a) case 1:this-selectsort

13、();break;/ok case 2:this-insertSort();break;/ok case 3:this-bubbleSort();break;/ok case 4:this-quickSort();break;/ok case 5:this-mergeSort();break;/ok case 6:this-heapSort();break;/ok case 7:exit(1);break; default:couterrorprintmenu();break; ;template void printout(T A,int n)/打印数组,测试时用 for(int i=0;i

14、n;i+) coutAi ; coutendl;template T *producedate(int x)/产生顺序,逆序,随机的数组 int i; T *A=new TSIZE; switch(x) case 1: for(i=0;i0;i-)Ai-1=SIZE-i;return A;/逆序 break; case 3:srand(time(NULL); for(i=0;iSIZE;i+)Ai=rand()%1000+1;return A;/随机 break; default: couterrorendl;return A;break; template void Swap(T &a,T

15、&b)/交换2个元素 T temp=a; a=b; b=temp;template void Menu:bubbleSort() cout冒泡排序childmenu(); T *A; double duration; clock_t start,finish; start=clock(); coutokendl; for(int i=0;iTIMES;i+) A=producedate(b); BubbleSort(A,SIZE); delete A; finish=clock(); duration=(double)(finish-start)/CLOCKS_PER_SEC; /printo

16、ut(A,SIZE); cout用时: durationbubbleSort(); /*ok*/template void Menu:heapSort() cout堆排序endl; cout直接用随机数据测试endl; T *A; double duration; clock_t start,finish; start=clock(); coutokendl; for(int i=0;iTIMES;i+) A=producedate(3); HeapSort(A,SIZE); delete A; finish=clock(); duration=(double)(finish-start)/C

17、LOCKS_PER_SEC; cout用时: durationprintmenu(); template void Menu:insertSort() cout直接插入排序childmenu(); T *A; double duration; /A=producedate(b); /if(A=NULL)coutinsertSort(); /printout(A,SIZE); clock_t start,finish; start=clock(); coutokendl; for(int i=0;iTIMES;i+) A=producedate(b); InsertSort(A,SIZE); d

18、elete A; finish=clock(); duration=(double)(finish-start)/CLOCKS_PER_SEC; /printout(A,SIZE); cout用时: durationinsertSort(); template void Menu:mergeSort() /this-childmenu(); cout合并排序endl; cout直接用随机数据测试endl; T *A; double duration; clock_t start,finish; start=clock(); coutokendl; for(int i=0;iTIMES;i+)

19、A=producedate(3); MergeSort(A,SIZE); delete A; finish=clock(); duration=(double)(finish-start)/CLOCKS_PER_SEC; /printout(A,SIZE); cout用时: durationprintmenu(); /*ok*/templatevoid Menu:quickSort() this-childmenu2(); T *A; double duration; clock_t start,finish; if(c=1) cout原始快速排序endl; cout直接用随机数据测试endl

20、; start=clock(); coutokendl; for(int i=0;iTIMES;i+) A=producedate(3); QuickSort2(A,SIZE); delete A; finish=clock(); duration=(double)(finish-start)/CLOCKS_PER_SEC; cout用时: durationquickSort(); else if(c=2) cout改进的快速排序endl; cout直接用随机数据测试endl; /*A=producedate(3); printout(A,SIZE); quick(A,SIZE); print

21、out(A,SIZE); delete A; this-printmenu(); */ /T *A; start=clock(); coutokendl; for(int i=0;iTIMES;i+) A=producedate(3); quick(A,SIZE); delete A; finish=clock(); duration=(double)(finish-start)/CLOCKS_PER_SEC; cout用时: durationquickSort(); elsecouterrorprintmenu();template void Menu:selectsort() /this-

22、childmenu(); cout简单选择排序endl; cout直接用随机数据测试endl; T *A; double duration; clock_t start,finish; start=clock(); coutokendl; for(int i=0;iTIMES;i+) A=producedate(3); SelectSort(A,SIZE); delete A; finish=clock(); duration=(double)(finish-start)/CLOCKS_PER_SEC; /printout(A,SIZE); cout用时: durationprintmenu(); /*ok!*/Mymain.cpp#include Menu.hint main() Menu MenuObj; MenuObj.printmenu();

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1