版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、实验内容:对二路归并排序和快速排序对于逆序的顺序数的排序时间复杂度比较。二、所用算法的基本思想及复杂度分析:1、 归并排序1) 基本思想:运用分治法,其分治策略为: 划分:将待排序列 r1,r2,rn划分为两个长度相等的子序列r1,rn/2和rn/2+1,rn。 求解子问题:分别对这两个子序列进行排序,得到两个有序子序列。 合并:将这两个有序子序列合并成一个有序子序列。2) 复杂度分析:二路归并排序的时间代价是O(nlog2n)。二路归并排序在合并过程中需要与原始记录序列同样数量的存储空间,因此其空间复杂性O(n)。2、 快速排序:1) 基本思想:运用分治法,其分治策略为: 划分:选定一个
2、记录作为轴值,以轴值为基准将整个序列划分为两个子序列r1ri-1和ri+1rn,轴值的位置i在划分的过程中确定,并且前一个子序列中记录的值均小于或等于轴值,后一个子序列中记录的值均大于或等于轴值。 求解子问题:分别对划分后的每一个子序列递归处理。 合并:由于对子序列r1ri-1和ri+1rn的排序是就地进行的,所以合并不需要执行任何操作。2) 复杂度分析: 快速排序在平均时间复杂性是O(nlog2n)。最坏的情况下是O(n2)。三、源程序及注释:1、 归并排序#include#include#include windows.husing namespace std;void Merge(int
3、 r,int r1,int s,int m,int t )int i=s;int j=m+1;int k=s;while(i=m&j=t)if(ri=rj)r1k+=ri+;/取ri和rj中较小的放入r1k中else r1k+=rj+;if(i=m)while(i=m)r1k+=ri+;/第一个没处理完,进行收尾else while(j=t)r1k+=rj+;/第二个没处理完,进行收尾for(int l=0;lk;l+)rl=r1l;/将合并完成后的r1序列送回r中int MergeSort(int r,int r1,int s,int t)if(s=t)r1s=rs;elseint m;m=
4、(s+t)/2;MergeSort(r,r1,s,m);/归并排序前半个子序列MergeSort(r,r1,m+1,t); /归并排序后半个子序列Merge(r1,r,s,m,t);/合并两个已排序的子序列return 0;void main()int a100000;int a110000; int n,i; int b3= 1000,3000,5000;/产生3个数组。 for(int j=0; j3; j+) n=bj; for(i=1; i=n; i+) ai=n;LARGE_INTEGER BegainTime ; LARGE_INTEGER EndTime ; LARGE_INTE
5、GER Frequency; QueryPerformanceFrequency(&Frequency); QueryPerformanceCounter(&BegainTime) ; int c=MergeSort(a,a1,0,n-1);QueryPerformanceCounter(&EndTime);cout 数据个数为n时归并排序的时间为(单位:s): (double)( EndTime1.QuadPart - BegainTime1.QuadPart )/ Frequency1.QuadPart endl; 2、快速排序#include#include#include window
6、s.husing namespace std;int Partition (int data,int first,int end)int i,j;i=first;j=end; while(ij)while(ij&datai=dataj)j-;/从左侧扫描if(ij)int temp; temp=datai;datai=dataj;dataj=temp;/将较小的放到前面i+;while(ij&datai=dataj)i+;/从右侧扫描if(ij)int temp1;temp1=datai;datai=dataj;dataj=temp1;/将较小的放到后面j-;return i;int quic
7、ksort(int c,int first,int end)int i;if(firstend) i=Partition(c,first,end);/对chs到cht进行一次划分quicksort(c,first,i-1);/递归处理左区间quicksort(c,i+1,end);/递归处理右区间return 0;void main()int a100000,n,i; int b3= 1000,3000,5000;/3个数据范围 for(int j=0; j3; j+) n=bj; for(i=1; i=n; i+) ai=n;LARGE_INTEGER BegainTime ; LARGE_
8、INTEGER EndTime; LARGE_INTEGER Frequency ; QueryPerformanceFrequency(&Frequency); QueryPerformanceCounter(&BegainTime) ; int c= quicksort(a,0,n);QueryPerformanceCounter(&EndTime); cout 数据个数为n时快速排序的时间为(单位:s): (double)( EndTime.QuadPart - BegainTime.QuadPart )/ Frequency.QuadPart endl; 四、运行输出结果: 归并排序快速排序五、调试和运行程序过程中产生的问题、采取的措施及获得的相关经验教训:1、在归并排序中,书中最后应将递归后的r1数组送回r数组中,即rl=r1l,否
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 瓷砖种类介绍课件
- 成长与职业发展课件
- 2025年企业培训项目与企业战略规划匹配可行性研究报告
- 九年级物理微专题教学设计:欧姆定律在生活中的实践应用探究
- 七年级数学《生活中的立体图形》第2课时教学设计:展开与折叠中的空间观念培育
- 小学五年级科学教学设计:基于证据推理的金属导热性能比较实验探究
- 高中地理必修一风力侵蚀地貌教学设计
- 九年级英语Unit3定语从句定语从句关系代词辨析教学设计
- 初中语文七年级上册第六单元背记手册教学设计
- 八年级语文昆明的雨审美阅读教学设计
- 2025年公司主要负责人安全培训考试试题及答案(有一套)
- 2026年初级经济师经济基础真题试卷及答案解析
- 2026年中铝集团校园招聘笔试
- 专科医生如何带教全科医生课件
- 2026年春岭南版(新教材)小学美术二年级下册教学计划及进度表
- 雨课堂学堂在线学堂云《Age of Sustainable Development(SDG Academy)》单元测试考核答案
- 人保财险理赔培训
- 教育培训机构招生销售人员面试问题集
- 雕塑总体施工方案(3篇)
- 生物安全上岗证培训课件
- 车辆供货方案范本
评论
0/150
提交评论