




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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<iostream>#include<fstream>#include "window
3、s.h"using namespace std;void Merge(int 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;l<k;l+)rl=r1l;/
4、将合并完成后的r1序列送回r中int MergeSort(int r,int r1,int s,int t)if(s=t)r1s=rs;elseint m;m=(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; j<3; j+) n=bj;
5、for(i=1; i<=n; i+) ai=n;LARGE_INTEGER BegainTime ; LARGE_INTEGER EndTime ; LARGE_INTEGER Frequency; QueryPerformanceFrequency(&Frequency); QueryPerformanceCounter(&BegainTime) ; int c=MergeSort(a,a1,0,n-1);QueryPerformanceCounter(&EndTime);cout << "数据个数为"<<n<&
6、lt;"时归并排序的时间为(单位:s):" <<(double)( EndTime1.QuadPart - BegainTime1.QuadPart )/ Frequency1.QuadPart <<endl; 2、快速排序#include<iostream>#include<fstream>#include "windows.h"using namespace std;int Partition (int data,int first,int end)int i,j;i=first;j=end; whil
7、e(i<j)while(i<j&&datai<=dataj)j-;/从左侧扫描if(i<j)int temp; temp=datai;datai=dataj;dataj=temp;/将较小的放到前面i+;while(i<j&&datai<=dataj)i+;/从右侧扫描if(i<j)int temp1;temp1=datai;datai=dataj;dataj=temp1;/将较小的放到后面j-;return i;int quicksort(int c,int first,int end)int i;if(first&l
8、t;end) 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; j<3; j+) n=bj; for(i=1; i<=n; i+) ai=n;LARGE_INTEGER BegainTime ; LARGE_INTEGER EndTime; LARGE_INTEGER Fre
9、quency ; 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数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省日照市新营小学2024-2025学年数学五年级第二学期期末调研试题含答案
- 文化产业园区规划考核试卷
- 淀粉在木材涂料中的增稠作用考核试卷
- 矿物与地质勘探用仪器仪表创新考核试卷
- 烟草批发商市场竞争力分析考核试卷
- 智能仪器仪表数据加密技术考核试卷
- 充电设施在医疗机构的布局考核试卷
- 电池制造过程中的环境友好型材料应用考核试卷
- 石油化工设备操作规程考核试卷
- 邯郸市第二中学高二上学期期中考试历史试题
- 2025山西地质集团招聘37人笔试参考题库附带答案详解
- 金融科技学知到智慧树章节测试课后答案2024年秋重庆工商大学
- 《中华人民共和国招标投标法》知识培训
- 【大数据百家讲坛】2025年DeepSeek、Manus与AI+Agent行业现状报告
- 2025年中考数学压轴模拟试卷(含答案解析)
- 2024年湖南新华书店集团招聘笔试真题
- 风电机组检修规程
- 云南省曲靖市2025届高三上学期第一次质量检测数学试题 含解析
- 高中化学总复习基础知识填空
- 2025年01月工业和信息化部工业文化发展中心第三批社会公开招聘2人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 江苏无锡历年中考语文古诗欣赏试题汇编(2003-2022)
评论
0/150
提交评论