实验1分治算法_第1页
实验1分治算法_第2页
实验1分治算法_第3页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、算法设计与分析实验报告实验 1 分治算法姓名学号 班级实验日期 2015 、1、1 实验地点一、实验目得1、掌握分治算法得设计思想与分析方法; 、掌握归并排序、快速排序等高效排序算法。二、实验环境、硬件环境PU:酷睿内存:GB硬盘:1TB2、软件环境操作系统 :win10编程环境: ev-C+编程语言: C 语言三、实验内容1、编写程序,实现归并排序算法 .()归并排序算法 归并排序就是建立在归并操作上得一种有效得排序算法, 该算法就是采用分治法 (Div e and oquer)得一个非常典型得应用。将已有序得子序列合并, 得到完全有序得序列 ;即先使每个子序列有序 ,再使子序列段间有序。(

2、)归并排序算法分析时间复杂度 :( og )空间复杂度 ( nlogn)(3)编程要求待排序数组长度至少为 16,数组中可以有相同元素 ; 按递增排序。( 4)程序代码 (含注释)/ 归并排序算法实现 incue < d o、 h> includ < allo、 h> #define MXE 50?/ 线性表中最多元素个数 pe ef it eyType; ty ede ar IfoType10; t edef stuct?/ 记录类型eTye key; ? / 关键字项Info pe ata; ?/ 其她数据项,类型为 f pe Rc p;void Merge( Re

3、 Type ,int ,i mid,in high)/ 将两个有序表 Row、id与 Rid+1、 h归并为一个有序表 lw、high中? cyp *R1;int i=low,jmid 1,k=0; / 就是得下标 ,i、j 分别为第 1、2 段得下标 ?R1=(Recype )llo( iglow+)sizeo(Recype); / 动态分配空间whil ( i d <high)/ 在第 1 段与第段均未扫描完时循环? f (Ri、key<=j、ky)?/将第 1段中得记录放入 R1中? ?R1k=R i;?i+;k+;?else/ 将第 2 段中得记录放入中? R1kR ;?j

4、+;k+;while (i<=mid)?/ 将第 1 段余下部分复制到 R1?R1k=Ri;? i+;k+;?while (j<=high)/将第 2 段余下部分复制到 R1?1k=Rj;?j+;k+;?o ( ,ilo; <=high;k+,i+) /将 R1复制回 R中?Ri R k;o M gePas(s RecType R,nt ng h,i )?/ 实现一趟归并 ?nt i;?fo (i0;+2*legth1<n;=i+2lnth) ?/归并 lent长得两 相邻子表?Mre(,i,+length,i+2*ength-1);i (+legth1)/ 余下两个子

5、表,后者长度小于 l h?Mere(R,i,iegth-1,n-1);?/ 归并这两个子表void MrSot(eTye R,n n) / 二路归并排序算法?int length,k, ;? ? /i 用于累计归并得趟数or ( en t=1; ength ;length=2 length )? MergePss( ,length, n) ;printf( ”第%趟归并 , i+);/ 输出每一趟得排序结果?r ( 0; k+)?p intf ( ”%d", 、key);?printf (n" );in m in()?int i,k,;RecTpe RMAXE ;?pri

6、t (请输入元素个数 n: n) ; canf("%,&); intf("请输入 d 个元素:”,n);for (i0;in;i+)?sanf(”%”,&Ri、key); ?rinf( ”n”);?M rgeSort( R,); /执行排序函数prinf("归并排序结果: n"); pintf(”);for (k0;k;k+) ?p f(5d,R、ky);?prinf(" n”);?r ur 0; 5)程序输出2、编写程序,实现快速排序算法。()快速排序算法 基本思想就是:通过一趟排序将要排序得数据分割成独立得两部分,其中一部分

7、得所有数据都比另外一部分得所有数据都要小 ,然后再按此方法对这两部分数据 分别进行快速排序,整个排序过程可以递归进行 ,以此达到整个数据变成有序序 列.(2)快速排序算法分析 时间复杂度 :O(nlogn) 空间复杂度: ( nl gn )()编程要求 待排序数组长度至少为 ,数组中可以有相同元素; 按递增排序。(4)程序代码 (含注释 ) /快速排序算法实现#ncude <std、 h>df e AXE 5?/线性表中最多元素个数typedef in e Type;t df ha InfoType1;typed st uct记录类型?KeyType k ;/ 关键字项nfoye

8、ta; ?/ 其她数据项,类型为 InoType RcTy ;void QuickSort(Rec ype R,int ,nt ) 对 至 t 得元素进行快速排序int i s,j=,k;?RecType emp;?i (t) ? ?/ 区间内至少存在一个元素得情况 ?while ( Rj、key tep、k)? emp R;?/ 用区间得第 1 个记录作为基准hle (i!=)? ?/从区间两端交替向中间扫描, 直至=j 为止j-; ?/从右向左扫描 ,找第个关键字小于 ep、k得 Rji (ij)表示找到这样得 j, i、R交换? ?R i=Rj;? ?i+;?while ( Ri、ky

9、emp、key)?i+; ? /从左向右扫描, 找第 1个关键字大于 emp、ky 得记录 Rif (ij) ?/ 表示找到这样得 R, i、Rj交换? ?Rj Ri;?j; ? ?Ri= em;?QikSot(R,s,i1); / 对左区间递归排序?QuickSrt(R,i+,); / 对右区间递归排序?in main()?i t i , ,n;ecType MAXE ;?prinf("请输入元素个数 n:n ”);canf("d”,);?prin ("请输入%个元素 :n",);fr ( =0;i<n;i+)? scnf( ” %d,&i、key);?pr tf (”n” );uikort(R,0,1); / ?执行排序函数 pritf ("快速排序结果: n”);?prnt( ”");for (k0;k<k +)?it(”5d",R、 y);prin f( nn ); tu n 0;( 5)程序输出四、实验总结(心得体会、需要注意得问题等 )通过这次实验 ,我对归并排序与快速排序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论