




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、特殊线性表实验十二 排序技术实验一、 实验目的 掌握各种排序算法的基本思想; 掌握各种排序算法的实现方法; 掌握各种排序算法的时间性能及其花费时间的计算。 掌握各种排序算法所适应的不同场合。二、 实验内容1、随机函数产生 10000 个随机数,用直接插入、希尔、冒泡、直接选择等排序方法排序,并统计每 一种排序所花费的时间。2、随机函数产生 30000 个随机数,用快速、堆、归并等排序方法排序,并统计每一种排序所花费的时 间。、设计与编码#include #include #include using namespace std; void ShuChu(int r,int n) cout 输出
2、: ;for(int i=0;in;i+) coutrit;coutendl;coutendl;void InsertSort(int r,int n) /int a=r0;for(int i=2;in;i+)r0=ri;for(int j=i-1;r0=1;d=d/2)插入排序希尔排序for(int i=d+1;i0 & r0rj;j=j-d)rj+d=rj;rj+d=r0;r0=a;void BubbleSort(int r,int n) / 冒泡排序int exchange=n-1;while(exchange!=0)int bound=exchange;exchange=0;for(i
3、nt j=1;jrj+1)int s=rj+1;rj+1=rj;rj=s;exchange=j;void SelectSort(int r,int n) / 选择排序for(int i=0;in-1;i+)int index=i;for(int j=i+1;j=n-1;j+)if(rjrindex)index=j;if(index!=i)int a=rindex;rindex=ri;ri=a;ShuChu(r,n);次划分算法int Partition(int r,int first,int end) /快速排序特殊线性表int i=first; int j=end;r0=ri;int p=r
4、i;while(ij)while(ij&ri=rj)j-;if(ij)int a=rj; rj=ri; ri=a;i+;while(ij&ri=rj)i+;if(ij)int b=rj; rj=ri; ri=b; j-; return i;void QuickSort(int r,int first,int end) / 快速排序算法 int a=r0;if(firstend)int pivot=Partition(r,first,end);QuickSort(r,first,pivot-1);QuickSort(r,pivot+1,end); r0=a;void Sift(int r,int
5、 k,int m) / 筛选法调整堆的算法int i=k;int j=2*i;while(j=m)if(jm&rj=rj)break;elseint a=rj;rj=ri;ri=a;i=j;j=2*i;void HeapSort(int r,int n) / 堆排序算法 for(int i=n/2;i=1;i-)Sift(r,i,n-1);for(i=2;in-1;i+)int a=rn-i+1;rn-i+1=r1;r1=a;Sift(r,1,i-1);次归并算法void Merge(int r,int r1,int s,int m,int t) /int i=s;int j=m+1;int
6、k=s;while(i=m&j=t)if(ri=rj)r1k+=ri+;else r1k+=rj+;if(i=m)while(i=m)r1k+=ri+;else while(j=t)r1k+=rj+;void MergePass(int r,int r1,int n,int h)int i=1;int a=n-2*h+1;while (i=a)Merge(r,r1,i,i+h-1,i+2*h-1);i+=2*h; if(in-h+1)Merge(r,r1,i,i+h-1,n); else for(int k=i;k=n;k+)特殊线性表r1k=rk;归并排序非递归算法void MergeSor
7、t(int r,int r1,int n) /int h=1;while (hn)MergePass(r,r1,n,h);h=2*h;MergePass(r1,r,n,h);h=2*h;void menu()coutcout 排序技术实验 endl;endl;cout1. 直接插入排序 endl;cout2. 希尔排序 endl;cout3. 冒泡排序 endl; cout4. 直接选择排序 endl;cout5. 快速排序 endl;cout6. 堆排序 endl;cout7. 归并排序 endl; cout8. 退出 endl;int main()clock_t start,end;men
8、u();int flag=1; while(flag)coutint i;endl;couti;switch(i)case 1:int srand(30001);int a30001;int n;coutn;a0=0;秒endl;秒endl;秒endl;for(int i=1;in;i+)ai=rand();ShuChu(a,n);cout 直接插入排序结果: endl;start=clock();InsertSort(a,n);end=clock();ShuChu(a,n);double count=(double)(end-start)/1000;cout 排序所用时间为 :count b
9、reak;case 2:int srand(30001);int a30001;int n;coutn;a0=0;for(int i=1;in;i+)ai=rand();ShuChu(a,n);cout 希尔排序结果: endl;start=clock();ShellSort(a,n);end=clock();ShuChu(a,n);double count=(double)(end-start)/1000;cout 排序所用时间为 :count break; case 3:int srand(30001);int a30001;int n;coutn;a0=0;for(int i=1;in;
10、i+)ai=rand();ShuChu(a,n);cout 冒泡排序结果: endl;start=clock();BubbleSort(a,n);end=clock();ShuChu(a,n);double count=(double)(end-start)/1000;cout 排序所用时间为 :count特殊线性表break; case 4:int srand(30001);int a30001;int n;coutn;a0=0;for(int i=1;in;i+)ai=rand();ShuChu(a,n);cout 直接选择排序结果: endl; start=clock();SelectS
11、ort(a,n);end=clock();ShuChu(a,n);double count=(double)(end-start)/1000;cout 排序所用时间为 :count break; case 5:int srand(30001);int a30001;int n;coutn;a0=0;for(int i=1;in;i+)ai=rand();ShuChu(a,n);cout 快速排序结果: endl; start=clock();QuickSort(a,1,n-1);end=clock();ShuChu(a,n);double count=(double)(end-start)/1
12、000;cout 排序所用时间为 :count break;case 6:int srand(30001);int a30001;int n;coutn;a0=0;for(int i=1;in;i+)ai=rand();ShuChu(a,n);cout 堆排序结果: endl;:endl;秒endl;秒endl;start=clock();HeapSort(a,n);end=clock();ShuChu(a,n);double count=(double)(end-start)/1000;cout 排序所用时间为 :count 秒 endl;break; case 7:int srand(30
13、001);int a30001;int n;int a130001;coutn;a0=0;for(int i=1;in;i+)ai=rand();ShuChu(a,n);cout 归并排序结果: endl;start=clock();MergeSort(a,a1,n-1);end=clock();ShuChu(a,n);double count=(double)(end-start)/1000;cout 排序所用时间为 :count 秒 endl;break; case 8:flag=0;break; default:cout 错误 !endl;break;return 0; 四、运行与调试a) 在调试程序的过程中遇到什么问题,是如何解决的? 答:数据的下标经常出错,数组的第一个数应是 a0.b) 设计了哪些设计数据?测试结果是什么?答:程序设计了对随机函数产生 10000 个随机数进行直接插入、希尔、冒泡、直接选择等排序方法排 序,并统计每一种排序所花费的时间;对随机函数产生 30000 个随机数进行快速、堆、归
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机械设计 第5章 螺纹连接和螺旋传动学习课件
- 《祝福》教学设计 2023-2024学年统编版高中语文必修下册
- 2025至2030年中国布制灯罩数据监测研究报告
- 二零二五年花卉养护与花店售后服务合同
- 二零二五年度厨师与甜品店老板合作开发合同
- 2025年度旅游景区委托经营管理公司协议
- 第16课《我的叔叔于勒》教学设计2024-2025学年统编版语文九年级上册
- 二零二五年度南宁市事业单位财务会计人员聘用协议书
- 2025年度服装企业环保材料研发与应用用工合同
- 二零二五年度施工安全文明施工风险评估协议
- 《大学生安全教育》(统编版)课件 第二章 人身安全
- 近岸海上柔性光伏支架结构研究
- 2025年广西投资集团有限公司招聘笔试参考题库含答案解析
- InDesign实例教程(InDesign 2020)(电子活页微课版)课件 第1章 InDesign 2020入门知识
- 驼鸟养殖生态旅游项目策划书方案模版(4篇)
- 会展服务与管理课件
- 安全风险隐患举报奖励制度
- 护理中级竞聘报告
- 《肩袖损伤护理》课件
- 维修保养协议书范本
- 河南省郑州市外国语高中2025届高考压轴卷英语试卷含解析
评论
0/150
提交评论