实验十二排序技术实验报告.docx
- 文档编号:28050659
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:16
- 大小:69.77KB
实验十二排序技术实验报告.docx
《实验十二排序技术实验报告.docx》由会员分享,可在线阅读,更多相关《实验十二排序技术实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
实验十二排序技术实验报告
实验十二排序技术实验
一、实验目的
1掌握各种排序算法的基本思想;
⑵掌握各种排序算法的实现方法;
⑶掌握各种排序算法的时间性能及其花费时间的计算。
⑷掌握各种排序算法所适应的不同场合。
二、实验内容
1、随机函数产生10000个随机数,用直接插入、希尔、冒泡、直接选择等排序方法排序,并统计每一种排序所花费的时间。
2、随机函数产生30000个随机数,用快速、堆、归并等排序方法排序,并统计每一种排序所花费的时间。
三、设计与编码
#include
#include
#include
usingnamespacestd;
voidShuChu(intr[],intn)
{
cout<<"输出:
";
for(inti=0;i cout< cout< cout<<"*****************************************"< } voidInsertSort(intr[],intn)//插入排序 { inta=r[0]; for(inti=2;i { r[0]=r[i]; for(intj=i-1;r[0] r[j+1]=r[j]; r[j+1]=r[0]; } r[0]=a; } voidShellSort(intr[],intn)//希尔排序 { inta=r[0]; for(intd=n/2;d>=1;d=d/2) { for(inti=d+1;i<=n-1;i++) { r[0]=r[i]; for(intj=i-d;j>0&&r[0] r[j+d]=r[j]; r[j+d]=r[0]; } } r[0]=a; } voidBubbleSort(intr[],intn)//冒泡排序 { intexchange=n-1; while(exchange! =0) { intbound=exchange;exchange=0; for(intj=1;j if(r[j]>r[j+1]) { ints=r[j+1]; r[j+1]=r[j]; r[j]=s; exchange=j; } } } voidSelectSort(intr[],intn)//选择排序 { for(inti=0;i { intindex=i; for(intj=i+1;j<=n-1;j++) if(r[j] index=j; if(index! =i) { inta=r[index]; r[index]=r[i]; r[i]=a; } } ShuChu(r,n); } intPartition(intr[],intfirst,intend)//快速排序一次划分算法 { inti=first; intj=end; r[0]=r[i]; intp=r[i]; while(i { while(i if(i { inta=r[j]; r[j]=r[i]; r[i]=a; i++; } while(i if(i { intb=r[j]; r[j]=r[i]; r[i]=b; j--; } } returni; } voidQuickSort(intr[],intfirst,intend)//快速排序算法 { inta=r[0]; if(first { intpivot=Partition(r,first,end); QuickSort(r,first,pivot-1); QuickSort(r,pivot+1,end); } r[0]=a; } voidSift(intr[],intk,intm)//筛选法调整堆的算法 { inti=k; intj=2*i; while(j<=m) { if(j if(r[i]>=r[j])break; else { inta=r[j]; r[j]=r[i]; r[i]=a; i=j; j=2*i; } } } voidHeapSort(intr[],intn)//堆排序算法 { for(inti=n/2;i>=1;i--) Sift(r,i,n-1); for(i=2;i { inta=r[n-i+1]; r[n-i+1]=r[1]; r[1]=a; Sift(r,1,i-1); } } voidMerge(intr[],intr1[],ints,intm,intt)//一次归并算法 { inti=s; intj=m+1; intk=s; while(i<=m&&j<=t) { if(r[i]<=r[j])r1[k++]=r[i++]; elser1[k++]=r[j++]; } if(i<=m)while(i<=m) r1[k++]=r[i++]; elsewhile(j<=t) r1[k++]=r[j++]; } voidMergePass(intr[],intr1[],intn,inth) { inti=1; inta=n-2*h+1; while(i<=a) { Merge(r,r1,i,i+h-1,i+2*h-1); i+=2*h; } if(i elsefor(intk=i;k<=n;k++) r1[k]=r[k]; } voidMergeSort(intr[],intr1[],intn)//归并排序非递归算法 { inth=1; while(h { MergePass(r,r1,n,h); h=2*h; MergePass(r1,r,n,h); h=2*h; } } voidmenu() { cout<<"排序技术实验"< cout<<"*********************"< cout<<"1.直接插入排序"< cout<<"2.希尔排序"< cout<<"3.冒泡排序"< cout<<"4.直接选择排序"< cout<<"5.快速排序"< cout<<"6.堆排序"< cout<<"7.归并排序"< cout<<"8.退出"< } intmain() { clock_tstart,end; menu(); intflag=1; while(flag) { inti; cout<<"*****************************************"< cout<<"请输入你所需要的选项: "; cin>>i; switch(i) { case1: { intsrand(30001); inta[30001];intn; cout<<"请输入随机产生的随机数的个数: "; cin>>n; a[0]=0; for(inti=1;i a[i]=rand(); ShuChu(a,n); cout<<"直接插入排序结果: "< start=clock(); InsertSort(a,n); end=clock(); ShuChu(a,n); doublecount=(double)(end-start)/1000; cout<<"排序所用时间为: "< break; } case2: { intsrand(30001); inta[30001];intn; cout<<"请输入随机产生的随机数的个数: "; cin>>n; a[0]=0; for(inti=1;i a[i]=rand(); ShuChu(a,n); cout<<"希尔排序结果: "< start=clock(); ShellSort(a,n); end=clock(); ShuChu(a,n); doublecount=(double)(end-start)/1000; cout<<"排序所用时间为: "< break;} case3: {intsrand(30001); inta[30001];intn; cout<<"请输入随机产生的随机数的个数: "; cin>>n; a[0]=0; for(inti=1;i a[i]=rand(); ShuChu(a,n); cout<<"冒泡排序结果: "< start=clock(); BubbleSort(a,n); end=clock(); ShuChu(a,n); doublecount=(double)(end-start)/1000; cout<<"排序所用时间为: "< break;} case4: {intsrand(30001); inta[30001];intn; cout<<"请输入随机产生的随机数的个数: "< cin>>n; a[0]=0; for(inti=1;i a[i]=rand(); ShuChu(a,n); cout<<"直接选择排序结果: "< start=clock(); SelectSort(a,n); end=clock(); ShuChu(a,n); doublecount=(double)(end-start)/1000; cout<<"排序所用时间为: "< break;} case5: {intsrand(30001); inta[30001];intn; cout<<"请输入随机产生的随机数的个数: "; cin>>n; a[0]=0; for(inti=1;i a[i]=rand(); ShuChu(a,n); cout<<"快速排序结果: "< start=clock(); QuickSort(a,1,n-1); end=clock(); ShuChu(a,n); doublecount=(double)(end-start)/1000; cout<<"排序所用时间为: "< break; } case6: {intsrand(30001); inta[30001];intn; cout<<"请输入随机产生的随机数的个数: "; cin>>n; a[0]=0; for(inti=1;i a[i]=rand(); ShuChu(a,n); cout<<"堆排序结果: "< start=clock(); HeapSort(a,n); end=clock(); ShuChu(a,n); doublecount=(double)(end-start)/1000; cout<<"排序所用时间为: "< break;} case7: {intsrand(30001); inta[30001];intn; inta1[30001]; cout<<"请输入随机产生的随机数的个数: "; cin>>n; a[0]=0; for(inti=1;i a[i]=rand(); ShuChu(a,n); cout<<"归并排序结果: "< start=clock(); MergeSort(a,a1,n-1); end=clock(); ShuChu(a,n); doublecount=(double)(end-start)/1000; cout<<"排序所用时间为: "< break;} case8: {flag=0; break;} default: {cout<<"错误! ! ! "< break;}}} return0;} 四、运行与调试 a)在调试程序的过程中遇到什么问题,是如何解决的? 答: 数据的下标经常出错,数组的第一个数应是a[0]. b)设计了哪些设计数据? 测试结果是什么? 答: 程序设计了对随机函数产生10000个随机数进行直接插入、希尔、冒泡、直接选择等排序方法排序,并统计每一种排序所花费的时间;对随机函数产生30000个随机数进行快速、堆、归并等排序方法排序,并统计每一种排序所花费的时间。 结果实现各种排序方法的排序,并统计了排序所需时间。 c)程序运行的结果如何? 因排序结果太长,故只设计显示排序时间 五、实验小结 本实验通过不同的算法实现相同的排序,不同的排序算法时间性能亦不同,只要了解算法间的原理,程序就比较简单了,稍微要注意的是数组的下标问题,总的来说,本实验让我对个算法的理解更加深刻,也对数据结构的学习更深入,但还不够熟悉,需多多练习。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 十二 排序 技术 报告