下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《算法设计与分析》实验报告一学号:1004091130姓名:金玉琦日期:2011-10-13得分:一、实验内容:归并排序与快速排序。二、所用算法的根本思想及复杂度分析:1.分治法分治法的设计思想是将一个难以直接解决的大问题,划分成一些规模较小的问题,以便各个击破,分而治之。2.归并排序1〕根本思想归并排序其分治策略如下:划分:将待排序的序列从n/2处划分为两个长度相等的序列。求解子问题:分别对这两个子序列进行归并排序,得到两个有序子序列。合并:将这两个有序子序列合并成一个有序序列。2〕复杂度分析二路归并排序的合并步的时间复杂度为O(n),所以,二路归并排序算法存在如下递推式: 1 n=2T(n)= 2T(n/2)+n n>2将上式进行迭代运算,计算的二路归并排序的时间代价是O(nlogn)。二路归并排序归并过程中需要与原始记录序列同样数量的存储空间,因此其空间复杂度为O(n)。3.快速排序1〕根本思想快速排序的分治思想如下:划分:选定一个记录作为轴值,以轴值为基准将整个序列划分成两个子序列,轴值的位置i在划分过程中确定,并且前一个子序列中的记录的值均小于或等于轴值,后一个子序列的记录的值均大于或等于轴值。求解子问题:分别对划分后的每一个子序列递归处理。合并:将轴值前后的子序列的排序是就地进行的,所以合并不需要执行任何操作。2〕复杂度分析在最好的情况下每次划分对一个记录定位后,该记录的左右两侧子序列的长度相同。在具有n个记录的序列中,一次划分需要对整个带排序的序列扫描一遍,所需时间为O(n)。设T(n)是对n个记录的序列进行排序的时间,每次划分后,正好把带划分的区间划分为长度相同的两个子序列,那么有:T(n)≤2T(n/2)+n≤2(2T(n/4)+n/2)+n=4T(n/4)+2n≤4(2T(n/8)+n/4)+2n=8T(n/8)+3n……≤nT(1)+nlogn=O(nlogn)因此时间复杂度是O(nlogn)。在最坏的情况下,待排序的记录为正序或逆序时,时间复杂度为O(n)。由于快速排序是递归执行,需要一个栈存放每一层递归调用的必要信息,其最大的容量应该与递归调用的深度一致。最好情况因为要进行logn次递归调用,栈的深度是O(logn);最坏的情况下,进行n-1次调用,所以栈的深度为O(n)。三、源程序及注释:1、归并排序voidMergeSort(intr[],intrl[],ints,intt){ intm; if(s==t) rl[s]=r[s]; else { m=(s+t)/2; MergeSort(r,rl,s,m); //归并排序前半个子序列 MergeSort(r,rl,m+1,t); //归并排序后半个子序列 Merge(rl,r,s,m,t); //合并两个已排序的子序列 }}2、合并有序子序列voidMerge(intr[],intrl[],ints,intm,intt){ inti=s; intj=m+1; intk=s; while(i<=m&&j<=t) { if(r[i]<=r[j]) rl[k++]=r[i++]; //取r[i]和r[j]中较小的放入rl[k]中 else rl[k++]=r[j++]; } if(i<=m) { while(i<=m) rl[k++]=r[i++];//假设第一个子序列没有处理完,进行收尾处理 } else { while(j<=t) rl[k++]=r[j++];//假设第二个子序列没有处理完,进行收尾处理 } for(intn=s;n<=t;n++) { r[n]=rl[n]; //将合并完成后的rl[]序列送回r[]序列中 }}3、快速排序voidQuickSort(intr[],intfirst,intend){ intpivot; if(first<end) { pivot=Partition(r,first,end); //pivot是轴值在序列中位置 QuickSort(r,first,pivot-1); //递归左侧序列进行快排 QuickSort(r,pivot+1,end); //递归右侧序列进行快排 }}快速排序的一次划分intPartition(intr[],intfirst,intend){ inti=first; intj=end; //初始化 inttemp=0; while(i<j) { while(i<j&&r[i]<=r[j])j--; //从右侧扫描 if(i<j) { temp=r[i]; r[i]=r[j]; r[j]=temp; //将较小的记录交换到前面 i++; } while(i<j&&r[i]<=r[j])i++; //从左侧扫描 if(i<j) { temp=r[i]; r[i]=r[j]; r[j]=temp; //将较小的记录交换到后面 j--; } } returni; //返回轴值的最终位置}四、运行输出结果:五、调试和运行程序过程中产生的问题、采取的措施及获得的相关经验教训:调试过程中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年专业模具供应销售协议范本一
- 2024年代收付款业务合作合同版B版
- 2024年产品市场推广及销售代理合同
- 江南大学《电力变换技术》2021-2022学年第一学期期末试卷
- 佳木斯大学《药物分析专业创新创业拓展》2021-2022学年第一学期期末试卷
- 2024供水设施建设项目井施工合同版
- 2024基础型货物承运协议模板版B版
- 佳木斯大学《离散数学》2023-2024学年第一学期期末试卷
- 暨南大学《英语听说I》2021-2022学年第一学期期末试卷
- 2024合伙人股份转让协议模板范例
- 信息技术新旧课标对比
- 校园安全教育全面防范校园网络暴力
- DB32/T 4700-2024 蓄热式焚烧炉系统安全技术要求
- 杨靖宇英雄事迹心得体会3篇
- 月季花如何修剪
- 【孙子兵法】与商业智慧
- 智能电梯控制系统设计
- 《螺旋桨知识》课件
- 生产线布局和设备配置规定
- 滑雪场魔毯应急预案
- 篆刻课件完整版本
评论
0/150
提交评论