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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

C语言课程设计各种排序算法的设计和分析.docx

1、C语言课程设计各种排序算法的设计和分析C语言课程设计-各种排序算法的设计和分析华中科技大学文华学院数据结构 课 程 设 计 姓 名: 学 号: 学 部: 信息科学与技术学部 专 业: 班 级: 题 目: 各种排序算法的设计和分析 教 师: 2013年03月07日一. 课程设计报告的内容 1. 设计题目 2. 运行环境(软、硬件环境) 3. 算法设计的思想 4. 算法的流程图 5. 算法设计分析 6. 源代码 7. 运行结果分析 8. 收获及体会 二.数据结构课程设计题目各种排序算法的设计和分析1.设计题目(1)、需求分析利用随机函数产生N个随机整数(N=4000),利用直接插入排序、折半插入排

2、序,起泡排序、快速排序、选择排序、堆排序,基数排序七种排序方法(可添加其它排序方法)进行排序(结果为由小到大的顺序),并统计每一种排序所耗费的时间。把排序花的时间排在表格里面。(2)、程序的主要功能1.用户输入任意个数,产生相应的随机数2.用户可以自己选择排序方式(直接插入排序、折半插入排序、起泡排序、快速排序、选择排序、堆排序、基数排序)的一种3.程序给出原始数据、排序后从小到大的数据,并给出排序所用的时间。(3)、程序运行平台Visual C+ 6.0版本(4)、数据结构 (5)、算法及时间复杂度(一)各个排序是算法思想:(1)直接插入排序:将一个记录插入到已排好的有序表中,从而得到一个新

3、的,记录数增加1的有序表。(2)折半插入排序:插入排序的基本插入是在一个有序表中进行查找和插入,这个查找可利用折半查找来实现,即为折半插入排序。(3)起泡排序:首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字。依此类推,直到第N-1和第N个记录的关键字进行过比较为止。上述为第一趟排序,其结果使得关键字的最大纪录被安排到最后一个记录的位置上。然后进行第二趟起泡排序,对前N-1个记录进行同样操作。一共要进行N-1趟起泡排序。(4)快速排序:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字

4、小,则可分别对这两部分记录继续进行排序,已达到整个序列有序。(5)选择排序:通过N-I次关键字间的比较,从N-I+1个记录中选出关键字最小的记录,并和第I(1=I=N)个记录交换。(6)堆排序:在堆排序的算法中先建一个大顶堆,既先选得一个关键字作为最大的记录并与序列中最后一个记录交换,然后对序列中前N-1记录进行选择,重新将它调整成一个大顶堆,如此反复直到排序结束。(7)基数排序:按最低位优先法先对低位关键字进行排序,直到对最高位关键字排序为止,经过若干次分配和收集来实现排序(二)时间复杂度分析排序算法 最差时间时间复杂度 是否稳定?插入排序 O(n2)O(n2) 稳定 冒泡排序O(n2)O(

5、n2) 稳定 快速排序O(n2)O(n*log2n) 不稳定 选择排序O(n2)O(n2) 稳定 堆排序O(n*log2n) O(n*log2n) 不稳定 基数排序O(n*log2n)O(n2)稳定 4000个数据的时间比较:算法名称用时直接插入排序0.062折半插入排序0.047起泡排序0.188快速排序0.000选择排序0.078堆排序0.000基数排序0.000 (三)源代码:代码如下:#include#include#include#define N 4000void InsertSort() /第一个插入排序 int i,j,t; int aN; for(i=0;iN;i+) ai=

6、(int)rand(); printf(%d ,ai); printf(n); for(i=1;i=0&tat;j-) aj+1=aj; aj+1=t; for(i=0;iN;i+) printf(插入排序的程序:%dn,ai); void BInsertSort()/第二个,折半插入排序 int i=0,j=0,low=0,high=0,m=0; for(i=0;iN;i+) ai=(int)rand(); printf(%d ,ai); printf(n); for(i=2;i=N;+i) L0=Li; low=1;high=i-1; while(low=high) m=(low+high

7、)/2; if(L0Lm) high=m-1; else low=m+1; for(j=i-1;L0Lj;-j) Lj+1=Lj; /记录后移 Lhigh+1=L0; /插入 void BubbleSort()/第三个,冒泡排序 int i,j,l; int aN; for(i=0;iN;i+) ai=(int)rand(); printf(%d ,ai); printf(n); for(i=0;iN;i+) for(j=0;jai+1) l=ai; ai=ai+1; ai+1=l; printf(输出的冒泡排序数:%d ,ai); int QuickSort()/第四个,快速排序int mi

8、d; int dataN;int low;int high; for(i=0;iN;i+) ai=(int)rand(); printf(%d ,ai); printf(n); data0=datalow; mid=datalow; while(low high) while(low = mid) -high; datalow=datahigh; while(low high) & (datalow mid) +low; datahigh=datalow; datalow=data0; return low; void ChooseSort()/第五个,选择排序 int i,j,k,l; in

9、t aN; for(i=0;iN;i+) ai=(int)rand(); printf(%d ,ai); printf(n); for(i=0;i10;i+) k=i; for(j=i+1;jaj) l=ai; ai=aj; aj=l; printf(%dn,ai); int HeapSort()/第六个,堆排序 int s; int i; int rN; r0=rs; for(i=0;iN;i+) ai=(int)rand(); printf(%d ,ai); for(i=2*s;i+1=N;i*=2) if(iN & ri=ri) break; rs=ri; s=i; rs=r0; ret

10、urn 1;typedef struct node int key; node *next; RecType; Status RadixSort(Sqlist L) /第七个,基数排序 int t,i,j,k,d,n=1; RecType *p,*s,*q,*head10,*tail10; for(i=1;ikey=L.ri; if(i=1) q=s; p=s; t+; else q-next=s; q=s; t+; q-next=NULL; d=1; while(n0) for(j=0;jkey/d; k=k%10; if(headk=NULL) headk=p; tailk=p; else

11、 tailk-next=p; tailk=p; p=p-next; p=NULL; for(j=0;jnext=headj; q=tailj; q-next=NULL; d=d*10; n=0; m=1; while(mkey; i+; p=p-next; return OK; /主函数void main() printf(请输入figure:); scanf(%d,&figure); clock_t start, finish; /定义clock_t用于计时 double duration; printf(n *n); printf( n); printf( 算法排序比较系统 n); pri

12、ntf( n); printf( *n); printf( 以下是各个排序算法的代号:nn); printf( 一、直接插入排序 n); printf( 二、折半插入排序 n); printf( 三、冒泡排序 n); printf( 四、快速排序n); printf( 五、选择排序n); printf( 六、堆排序n); printf( 七、基数排序n); printf( 八、退出该系统nn); switch(figure) case 1:/直接插入排序 start=clock(); InsertSort(); finish = clock(); break; case 2:/折半插入排序 s

13、tart = clock(); BInsertSort(); finish = clock(); break; case 3:/冒泡排序 start = clock(); BubbleSort(); finish = clock(); break; case 4:/快速排序 start = clock(); QuickSort(); finish = clock(); break; case 5:/选择排序 start = clock(); ChooseSort(); finish = clock(); break; case 6:/堆排序 start = clock(); HeapSort(

14、); finish = clock(); break; case 7:/基数排序 start = clock(); RadixSort(l); finish = clock(); break; case 8:/直接退出 break; duration = (double)(finish - start) / 1000; /输出算术时间 printf(n本次的时间是:%lf secondsn,duration); 感想体会与总结1、做什么都需要耐心,做设计写程序更需要耐心。一开始的时候,我写函数写的很快,可是等最后调试的时候发现错误很隐蔽,就很费时间了。后来我先在纸上构思出函数的功能和参数,考虑

15、好接口之后才动手编,这样就比较容易成功了。2、做任何事情我决定都应该有个总体规划。之后的工作按照规划逐步展开完成。对于一个完整的程序设计,首先需要总体规划写程序的步骤,分块写分函数写,然后写完一部分马上纠错调试。而不是像我第一个程序,一口气写完,然后再花几倍的时间调试。一步步来,走好一步再走下一步。写程序是这样,做项目是这样,过我们的生活更是应该这样。3、感觉一开始设计结构写函数体现的是数据结构的思想,后面的调试则更加体现了人的综合素质,专业知识、坚定耐心、锲而不舍,真的缺一不可啊。4、通过这次课设,不仅仅复习了C语言相关知识、巩固了数据结构关于栈和排序的算法等知识,更磨练了我的意志。5、c语言是一门高效的高级语言,但是有些算法很难得掌握,不过通过不但的学习,相信会学的很好的。 好的算法编程技巧高效率好的程序。

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

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