ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:85.62KB ,
资源ID:24807056      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24807056.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(排序算法性能分析说明书.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

排序算法性能分析说明书.docx

1、排序算法性能分析说明书*实践教学* 兰州理工大学计算机与通信学院2012年春季学期数据结构课程设计题 目: 排 序算法性能分析专业班级: 计算机科学与技术 姓 名: 魏志强 学 号: 10500118 指导教师: 张永 成 绩:_ 目 录摘 要 11. 采用类c语言定义相关的数据类型 42. 各模块的伪码算法 53. 函数的调用关系图 114. 调试分析 115. 测试结果 136. 源程序(带注释) 16总 结 28参考文献 29致 谢 30附件 部分源程序代码 31 摘要 排序是计算机程序设计中的一种重要操作。各种部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。 关

2、键字:排序,性能分析。 排序:计算机内正常进行的一种操作,其目的是将一组无序的纪录序列调整为有序的纪录序列.其分为内部排序与外部排序.内部排序的过程是一个逐步扩大记录的有序序列长度的过程.内排序的方法有多种,按照所用策略的不同,可归纳为5类:插入排序,选择排序,快速排序,希尔排序,冒泡排序. 性能分析:通过输入相同的数组对不同的排序法则从得出的排序的比较次数,移动次数,从而比较各分析排序的优虐. 1. 采用类c语言定义相关的数据类型Int整型,int a100 :定义一个整形变量其容量为100.int n ,int ct,int mt,int temp. char字符型2. 各模块的伪码算法(

3、1) 插入排序伪码算法:Void InsertSort(Splist&L) For(i=2;i=L.length;+i) If(LT(L.ri.key,L.ri-1.key)“”,须将.ri插入有序子表 L.r0= L.ri;复制为哨兵L.ri= L.ri-1;For(j)i-2;LT(L.r0.key,L.rj.key);-j)L.rj+1= L.rj;记录后移L.rj+1= L.r0; 插入到正确位置/InsertSort(2) 希尔排序Void shllInsert(Splist & L,int dk) For(i=dk+1;i0<(L.r0.key,L.rj.key);j-=dk)

4、L.rj+dk=L.rj;记录后移L.rj+dk=L.r0; 插入/shellsortVoid shllsort (Splist & L,int data,int t) For(k=0;kt;+k)shllInsert(L,datak);/shellsort()快速排序Int part(sqlist&L,int low, int high) 交换顺序表中子表。Rlow.high的记录,使枢轴记录到位,并返回其所在位此时在它之前(后)的记录均不大(小)于它。Pivotkey=L.Low.key;While(loehigh) While(low=pivotkey) -high; L.rlow L.

5、rhigh;While(low=pivotkey) +low;L.rlow L.rhigh;Return low/partition(4) 选择排序Void selectsort(splist&L)For(i=1;iL.length;+i)J=selectMinKey(L,i);If(i!=j) L.ri L.rj;/selectsort()其泡排序Void bubblesort(sqlist r,int n)Int I,j,w;For (i=1;i=i+1;j-)If(rj.keyrj-1.key) 比较 W=rj;Rj=rj-1;Rj-1=w;3.函数的调用关系图 MainInsertio

6、n sort quick sort bubble sort selection sort shell sortOutput 比较 ct.mt次数 4. 调试分析a、 调试中遇到的问题及对问题的解决方法 刚开始进行输入时,对有些排序不能实现,我就对不能实现的排序进行分析,对产生的语法错误进行了及时的改正,以至所有的排序算法能够顺利的实现。b、 算法的时间复杂度和空间复杂度 算法的时间复杂度分别是O(n2),O(nlog2n),O(log2n),5.调试结果23 45 6 13 8132 12 45 3 9 46 37 100 20 0 6. 源程序:#include #define N 100/

7、定义数组最大为100const int t=3;/定义希尔排序次数int d3=4,3,1;/定义希尔排序比较量int qmt;/快速排序的移动次数int qct;/快速排序的比较次数 void output(int n,int a,int ct,int mt)/内部排序中调用的输出函数 int i; printf(n排序结果:); for( i=0;in;i+) printf(%d ,ai);/输出各排序完成的数组 printf(n比较次数:%dn,ct);/输出各排序比较次数 printf(移动次数:%dnn,mt);/输出各排序移动次数 void bubble_sort(int n,in

8、t A)/冒泡排序 int mt=0;/移动次数mt=movetime int ct=0;/比较次数ct=cmdtime int i,j,temp; int aN; for(i=0;in;i+) ai=Ai;/使数组a与数组A完全相同,对数组a进行操作(不改动A,可以使A被其他函数调用) for(i=0;in-1;i+) for(j=0;jn-1-i;j+,ct+) if(aj+1aj)/前后比较 temp=aj, aj=aj+1, aj+1=temp, mt+=3;/关键字交换计为3次移动 printf(冒泡排序); output(n,a,ct,mt); void selection_sor

9、t(int n,int A)/选择排序 int mt=0;/移动次数movetime int ct=0;/比较次数cmdtime int i,j,temp,k; int aN; for(i=0;in;i+) ai=Ai;/使数组a与数组A完全相同,对数组a进行操作(不改动A,可以使A被其他函数调用) for(i=0;in-1;i+) k=i; for(j=i+1;jaj) k=j; temp=ai, ai=ak, ak=temp, mt+=3;/关键字交换计为3次移动 printf(选择排序); output(n,a,ct,mt); void quick(int a,int low,int u

10、p)/快速排序递归算法 int i,j,temp; if(lowup) i=low; j=up; temp=alow, qmt+; while(i!=j) qct+; while(itemp) j-, qct+; if(ij) ai+=aj, qct+; qmt+; while(ij&ai=temp) i+, qct+; if(ij) aj-=ai, qct+, qmt+; ai=temp, qmt+; quick(a,low,j-1); quick(a,i+1,up); void quick_sort(int n,int A)/快速排序(通过调用快速排序递归算法完成) int i; int

11、aN; for(i=0;in;i+) ai=Ai;/使数组a与数组A完全相同,对数组a进行操作(不改动A,可以使A被其他函数调用) quick(a,0,n-1);/调用快速排序递归算法 printf(快速排序); output(n,a,qct,qmt); void insertion_sort(int n,int A)/插入排序 int mt=0;/移动次数movetime int ct=0;/比较次数cmdtime int i,j,temp; int aN; for(i=0;in;i+) ai=Ai;/使数组a与数组A完全相同,对数组a进行操作(不改动A,可以使A被其他函数调用) for(i

12、=1;i=0&tempaj;j-,ct+) aj+1=aj, mt+; aj+1=temp, mt+; printf(插入排序); output(n,a,ct,mt); void shell_sort(int n,int A)/希尔排序 int mt=0;/移动次数movetime int ct=0;/比较次数cmdtime int i,j,k,h,y; int aN; for(i=0;in;i+) ai=Ai;/使数组a与数组A完全相同,对数组a进行操作(不改动A,可以使A被其他函数调用) for(i=0;it;i+) h=di; for(j=h;j=0&yak;k-=h) ak+h=ak;

13、 ak+h=y; printf(希尔排序); output(n,a,ct,mt); void main() int n; int i; int AN; printf(请输入数组大小(小于100):); scanf(%d,&n);/输入所需排序数组大小 for(i=0;ivexnum),&(p-arcnum); printf(nvexnum=%d,arcnum=%dn,p-vexnum,p-arcnum); printf(give the vexs:n); for(i=0;ivexnum;i+) p-vexsi=getch(); printf(%3c,p-vexsi); for(i=0;iarc

14、num;i+) for(j=0;jvexnum;j+) p-arcsij.adj=0; printf(nthe arcs are:n);for(i=0;iarcnum;i+) for(j=0;jvexnum;j+) printf(%3d,p-arcsij.adj); printf(n); for(k=0;karcnum;k+) printf(give the two vexs between which there are arc:n); v1=getch();v2=getch(); printf(%c%cn,v1,v2); i=locate(G,v1);j=locate(G,v2); if(

15、i=0&j=0)p-arcsij.adj=1; printf(now the arcs:n);for(i=0;iarcnum;i+) for(j=0;jvexnum;j+) printf(%3d,p-arcsij.adj); printf(n); return 1;int locate(mgraph G,char v)int i; for(i=0;i=0) printf(%c,v);return 1; else return 0;char first(mgraph G,char v)int i,j; i=locate(G,v); for(j=0;jG.vexnum;j+) if(G.arcsi

16、j.adj=1) return G.vexsj; return -1;char next(mgraph G,char v1,char v2)int i,j; i=locate(G,v1);j=locate(G,v2); for(j+;j=0;w=next(G,v,w) k=locate(G,w); if(!visitedk) DFS(G,w); for(i=0;iG.vexnum;i+) if(visitedi=0) visit(G,G.vexsi);visitedi=1; return; main()mgraph *p; int i,j; char v; p=&G; clrscr(); createDG(p);for(i=0;iG.vexnum;i+) visitedi=0;printf(the visited:n);for(i=0;iG.vexnum;i+) printf(%3d,visitedi); printf(n); printf(the first to visit:n); v=getch(); printf(%cn,v); DFS(G,v); printf(nnow the visited:n); for(i=0;iG.vexnum;i+) printf(%3d,visitedi);_

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1