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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

西北工业大学程序设计大作业.docx

1、西北工业大学程序设计大作业学院XXX X学院班级XXXXXXXX学号XXXXXXXX姓名XXX1摘要 31.1设计题目 31.2设计内容 31.3开发工具 31.4应用平台 32详细设计 32.1程序结构 32.2主要功能 42.3函数实现 52.4开发日志 73程序调试及运行 73.1程序运行结果 73.2程序便用说明 123.3程序开发总结 124附件(源程序) 121摘要1.1设计题目算法型大作业题目:编写七种排序算法的演示程序。1.2设计内容编写快速排序、插入排序、选择排序、冒泡排序、堆排序、归并排序、基数排序函数,通过主函数调 用以实现七种排序算法的演示。1.3开发工具Visual

2、C+ 6.01.4应用平台Windows 2000/XP/Vista 32 位2详细设计2.1程序结构程序的整体结构与流程见下图所示。程序运行时在主菜单中输入序号选择排序方法或选择结束程序,当进行某种排序方法后,在主函数中 输入待排数据个数和待排数据,通过调用对应的排序函数实现排序并输出。该排序结束后再次进入主函数, 通过循环重童上述操作。其中,主函数中将数组地址和待排序数据个数传递给排序函数,在排序函数中实 现排序功能。2.2主要功能函数的功能为对快速排序、插入排序、选择排序、冒泡排序、堆排序、归并排序、基数排序算法的演Zj 0主函数:程序运行时,可使运行者根据提醒输入相关操作,从而进入不同

3、的排序方法或者退出。快速排序函数:根据快速排序的算法,最后输出 描入排序函数:根据描入排序的算法,最后输出 选择排序函数:根据选择排序的算法,最后输出 冒泡排序函数:根据冒泡排序的算法,最后输出堆排序函数:根据堆排序的算法,最后输出 归并排序函数:根据归并排序的算法,最后输出 基数排序函数:根据基数排序的算法,皋后输出2.3函数实现在主函数中对菜单输出,通过switch语句中的case分支选择所需要的排序方法;通过while 循环使演示程序在运行时能够持续进行脱排序:快速排序(kuaisu)又被称做分区交换排序,这是一种平均性能非常好的排序方法。其算法基本 思想是:任取排序表中的某个数据元素(

4、例如取第一个数据元素)作为基准,按照该数据元素的关键字 大小,将整个排序表划分为左右两个于表:左侧于表中所有数据元素的关键字都小干基准数据元素 的关键字。右侧于表中所有数据元素的关键字都大于或等于基准数据元素的关键字,基准数据元素则 排在这两个子表中间(这也是该数据元素最终应安放的位直),然后分别对这两个于表重复施行上述方 法的快速排序,直到所有的于表长度为1,则排序结束。插入排序:插入排序(charu)的基本思想:开始时把第一个数据元素作为初始的有序序列,然后从第二个 数据元素开始依次把数据元素按关键字大小描入到巳排序的部分排序表的适当位直。当插入第 i(li=n)个数据元素时,前面的i-1

5、个数据元素巳经排好序,这时,用第i个数据元素的关键字与前 面的i-1个数据元素的关键字顺序进行比较,找到插入位直后就将第i个数据元素插入。如此进行n-1 次描入,就完成了排序。以下是在顺序表上实现的直接插入排序在顺序表上进行直接插入排序时,当插入第i(li=n)个数据元素时,前面的A0、Al、Ai-2 巳经排好序,这时,用Ai-1啲关键字依次与的关键字顺序进行比较,如果这些数据 元素的关键字大于Ai-l|的关键字,则将数据元素向后移一个位置,当找到插入位置后就将插 入,就完成TAO,Al,.,An-l的排序。选择排序选择排序(xuanze)的算法基本思想是:a) 开始时设i的初始值为0。b)

6、如果i=n,因此在则趟归并中whUe循环不执 行,只做把temptable.arr|中的数据元素复制到table.arr的工作。基数排序:“基数排序法” (radix sort)则是属于分配式排序” (distribution sort),基数排序法又 称“桶子法” (bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素 分配至某些“桶”中,藉以达到排序的作用,基数排序法是属干稳定性的排序,其时间負杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的比较 性排序法。具体可以参看后面的代码进行理解。其它:

7、使用了 stdlib头文件里包含的系统函数,包括清屏函数和运行时的暂停,增强了程序运行时的 效果。2.4开发日志在老师布置了大作业的题目后,我就把题目下栽下来并进行分析巳选择合适的题目。经过我的慎 重考虑,选择了算法型大作业题目中的编写七种排序算法的演示程序,觉得自己有能力把这道题目很 好完成。在认真分析连题目后,基本确定了整体的思路,但是其中有堆排序,归并排序,基数排序我没有 在教材中接触过,干是借助了图书馆和网络上的资源,重点对这三的函数进行编写。在编写大作业过 程中大的困难我没有遇到,只是有些小的疏忽常常导致程序无法运行,如形参和实参的不一致等。我 也在其中意识到对知识学握的不够熟练,在

8、解决了这些问题后,我觉得自己对程序的编写更加熟练了, 对问题的分析也更加严谨了。在C程序设计的实验和理论考试之前代码巳基本完成。在考试结束后,我又对程序稍微进行了修改,使之运行时效果更好。接看开始写实验报告,整理 自己的大作业。我对我的作业是很满意的。3程序调试及运行3.1程序运行结果1 进入程序运行后所显示的菜单:2快速排序:CKC1234 5 678-safe-返出雀斥请谕入序F进厅选择: 押输入恃擀序数的个数: 备询入恃楼序数据: 4 7 9 2第i逍:2 4 7 9 5第2逍:2 4 7 9 5 算丁逍:2 4 5 9 7 笫4逍:2 4 5 7 9*序结杲:2 4 5 7 9 話按任

9、惫龍继续,3插入排序:博询入序号进行选择: 官输入待楼序数的个数: 幕输入恃拣序数据:4 6 3 1笫畑4 6 6 1當2趙汐4 6 6&3:3 4 4 6zi”序结杲:1 3 4 6 唁按任惫龍继续4选择排序:5冒泡排序:请询入序号进行选择: 春输入待擀序数的个数:请输入待楼序数据: 第2逍:27 12 56 第3趙:12 27 56推序结杲訂2 27 566 堆排序:CKC请输入序号进行选择: 鲁输入林序数的个数:请输入待楼序数据:9 12 3H第1趟,邙12 9S第2趙注2 30 9推序结杲:12 30 ?8请按任竜槌继续1234 5 678退出程序7 归并排序:8 基数排序:CKC堆序

10、结果:1 2 3请按任惫龍继续1234 5 678请询入序5进代选择:7请询入待擀序数的个数: 请输入待楼序数据:3 2 1第i逍:3 1 22 3退出程序9 结束:诵谕入序号进行选择:s谢谢迹的使曲Pae父父 any key to continue3.2程序使用说明1 打开源程序,调试完毕后开始运行,开始进行七种算法的演示;2按照说明进行输入,选择数字17即可进入相应的排序算法演示程序,选择8结束程序;3选择排序的方法后,按要求输入待排数据的个数,然后输入待排序数据即可(数据排序结束后,矣 自动清屏,进入菜单进行接下来的逸择);4.应当注意,本演示程序对数据进行的是升序;3.3程序开发总结在

11、选择这个题目时,我觉得难度系数10对我有挑战性,并且我对排序有相对比较熟悉,所以就选了 这个题目。但是在编写过程中却遇到很多问题。我和我的同学进行了讨论,查阅了图书馆和网络上的资料,结合 力我个人对本题目的理解对各种问题进行了处理,学到了很多教材上没有的知识。从这次实践中,我意识到自己还有很多不足之处。能力也得到了提高。我在进行编程时还需要翻书査 找,对于这一点,只能说对知识的学习还不够扎实,所以有空时还应该继续熟悉这门课程。另外,就是对 干错误的处理,不能得心应手,不能正确处理一些简单的错误。对于逻辑上的错误,不能够立即找到出错 点,往往需要向同学请教才能找出错误,并且改正。我觉得这是自己独

12、自思考能力不商的问题,遇事需要 自己仔细想想,若还不能改正,再请教别人也不迟。从总体上说,最终结果我很满意,我觉得我所设计的程序操作方便,功能良好。我在上面花费了很多 时间和精力,对作业不断进行修改和完善,我很有成就感。我的能力在这之中得到了提商。4附件(源程序)#include#include/快速排序*/void kuaisu(int A,int n)int i,j,k,t,p;for(i=0;in-l;i+)k=i;for(j=i+l;jn;j+)if(AjAk|) k=j;t=Ak;Ak=Ai;Ai=t;printf(%d 趟二 i+1);for(p=0;pn;p+) printf(H

13、%d M,Ap);printf(HnH);printf(n 排序结果for(i=0;in;i+)printf(H%d H,Ai);printf(nH);printf(nnu);system(npauseH);system(CLSM);/I* 插入排序 f */ void charu(int A,int n)int i,k,t,j,h=l;for(i=l;in;i+)t=Ai;k=i-l;while(tAk)Ak+l=Ak;k-;if(k=-l)break;printf(第 据:”,h+);for(j=0;jn;j+)printf(%d ”,Aj);printf(HnM);Ak+l=t;prin

14、tf(n 排序结果:); for(i=0;in;i+)printf(H%d M,Ai); printf(,nH);printf(,nH);system(npauseH);system(CLSM);/I* 选择排序 f */ void xuanze(int A,int n)int i,j,k,t,l,h=l;for(i=0;in-l;i+)k=i;for(j=i+l;jn;j+)if(AjAk|) k=j;if(i!=k)t=Ai;Ai=Ak;Ak=t;printf(%d 趙二 h+);for(l=0;ln;l+)printf(M%d M,A11);printf(HnM);printf(Hn 排

15、序结果:”);for(i=0;in;i+)printf(M%d M,Ai);printf(nnu);printf(Hnn);system(pauseH);system(HCLSM);/*W 泡排 *7/ void maopao(int A,int n)int i,j,t,h=l,p;for(j=0;jn-l;j+)for(i=0;iAi+l)t=Ai ,Ai=Ai+l,Ai+ l=t,p+;printf(n%d 趟二 h+);for(p=0;pn;p+) printf(M%d M,Apl); printf(MnM);printf(n 排序结果:); for(i=0;in;i+) printf(

16、H%d H,Ai);printf(HnM);printf(HnH); system(npause); system(nCLSM);/* 堆排序 */ void shift(int A , int i , int m)int k,t;t=Ai;k=2*i+l;while (km)if(km-l)&(AkAk+l) k+; if(t=0;i)shift(A,i,n);for (i=n-l;i=l;i)k=AO ;AO=Ai ;Ai=k;shift(A,O,i);printfC 第 01趟:”,h+);for(j=0;jn;j+)printf(%d ”,Aj);printf(HnM);printf(

17、n 排序结果:);for(i=0;in;i+)printf(M%d M,Ai);printf(nnu);printf(Hnn);system(npausen);system(HCLSM);/* 归并排 J*/ void merge(int number,int first,int last,int mid)int number_temp10H0;int i=first,j=mid+l,k;for(k=0;k=last-first;k+)if (i=mid+l)number_tempk=numberj+);continue;if (j=last+l)number_tempk=numberi+;c

18、ontinue;if (numb er i numb er j ) numb er_t emp k=numb er i+;else number_tempk=numberj+;for (i=first,j=O;i=last;i+J+)numberi = number_temp j;void merge_sort(int number,int first,int last)int micl=O;if(firstlast)mid=(first+last)/ 2;m erge_sort (numb er,first, mid);m er ge_sor t (numb er, micl+1 ,last

19、);m erge(number,first Jast,mid);void guibingfint a,int n) int i; merge_sort(a,0,n-l); printf(n 排序结果:); for(i=0;in;i+) printf(H%d ai); printf(nnH); printf(HnH);system(npause); system(nCLSM);/ 基数排序7/ void jishu(int clata,int n)int temp 1010=0r;int order10=0;int i,j,k,q,lsd;k=0;q=l;while(q=n)for(i=0;in

20、;i+)lsd=(datai/ q)%n);templsdorderlsd=datai;orderlsd|+;for(i=0;in;i+)if(orderi != 0)for (j=0 ;jorderi ;j+)data|k=t empi j;k+;orderi = 0;q*= n;k = 0;printf(Mn 排序结果:”);for(i=0;in;i+)printf(n%d H,clatai);printf(HnH);printf(HnH);system(pauseH); system(MCLSM);/* 主函数 */ int main()int A100,p,n,i;while(l)pr

21、intf(Hnt*七种排序算法的演示程序* )printf(Ht*n);printf(Ht*1 快速排序*n);printf(Ht*2描入排序*n);printf(Ht*3一选择排序*n);printf(Ht*4冒泡排序*n);printf(Mt*5堆排序*nu);printf(Ht*6归并排序*n);printf(Ht*7一基数排序*n);printf(Mt*8退出程序*n);printf(Mt*n1;printf(Ht*niT);printf r请输入序号进行选择:n”);scanf(M%dM,&p); if(p=8)break;printf(储输入待排序数的个数:n“); scanf(”d 役 &n);printff请输入待排序数据:rT);for(i=0;in;i+)scanf(”cT,&Ai);switch(p)case 1:kiiaisu(A,n);brea

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

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