




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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
3、 "windows.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<
4、k;l+)rl=r1l;/将合并完成后的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 a;int a110000; int n,i; int b3= 1000,3000,5000;/产生3个数组。 for(int j=0; j<3; j+)
5、 n=bj; 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 << "数据个数为"<<
6、;n<<"时归并排序的时间为(单位: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=en
7、d; while(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(
8、first<end) i=Partition(c,first,end);/对chs到cht进行一次划分quicksort(c,first,i-1);/递归处理左区间quicksort(c,i+1,end);/递归处理右区间return 0;void main()int a,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 Fr
9、equency ; 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数组中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大球小球的题目及答案
- DB1303T 071-2011 出口青龙板栗加工技术规程
- 2025年动漫产业链协同发展与产业协同机制研究
- 河北八大员证考试试题及答案
- 毛概期末考试试题及答案广东
- 江苏省安全员a证考试试题及答案
- 建筑安全员a类考试试题及答案
- 2025江西省财通供应链金融集团有限公司劳务派遣制人员招聘8人笔试参考题库附带答案详解
- 中职高一思想政治考试试题及答案
- 成都房地产项目前期物业管理及销售支持合同
- 《配电自动化系统》课件
- 【高新技术企业所得税税务筹划探析案例:以科大讯飞为例13000字(论文)】
- 资本论在中国智慧树知到课后章节答案2023年下烟台大学
- 架线弧垂计算表(应力弧垂插值计算)
- 国家开放大学《政治学原理》章节自检自测题参考答案
- 达林顿管中文资料
- 市医疗保险高值药品使用申请表
- 幼儿园教育活动设计与实施
- 中学教育惩戒规则实施方案
- 工业热泵发展白皮书2023-202308-中国节能协会热泵专业委员会
- 2022-2023学年浙江省杭州市萧山区教科版六年级下册期末考试科学试卷(解析版)
评论
0/150
提交评论