数据结构课程设计综合排序.docx
- 文档编号:9684313
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:14
- 大小:109.90KB
数据结构课程设计综合排序.docx
《数据结构课程设计综合排序.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计综合排序.docx(14页珍藏版)》请在冰豆网上搜索。
数据结构课程设计综合排序
滨江学院
数据结构课程设计
题 目 综合排序
院 系 计算机系
年级班级 13计科2
学生姓名 李柯江
学 号 20132308049
学 期 2014-2015
(二)
任课教师 黄 群
二O一五年五月二十日
1需求分析
1.1 任务与分析
任务:
利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。
要求:
1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。
并把排序后的结果保存在不同的文件中。
2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。
分析:
本系统实现了几种常用的排序方法,包括:
插入排序、起泡排序、快速排序(递归、非递归)、堆排序。
1.2功能模块的划分
1.2.1输入模块
利用随机函数产生N个随机整数(20000以上),个数由用户自己输入。
1.2.2输出模块
输出排序前或排序后的数据元素到屏幕显示,并且输出按照选择的算法排序后的数据元素到文件中保存。
1.2.3输出结论
比较不同排序时间长短,输出两种最快的排序方法。
1.2.4排序模块
插入排序
思路:
设有一组关键字{K1,K2,…….,Kn},排序开始变认为K1是一个有序的序列,让K2插入到表长为1的有序序列,使之成为一个表长为2的有序序列,让K3插入到表长为2的有序序列,使之成为一个表长为3的有序序列,依次类推,最后让Kn插入上述表长为n-1的有序序列,得到一个表长为n的有序序列.
冒泡排序
如果有n个数,则要进行n-1趟比较。
在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较
简单选择排序
通过n-I次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换之
2概要设计
2.1程序结构框图
2.2程序流程图
2.3头文件
#include
#include
#include
#include
2.5各种操作函数:
(1)创建一个数组函数:
(2)输出数组函数:
(3)简单选择排序
(4)插入排序函数:
(5)起泡排序函数:
(6)时间函数:
start=clock();end=clock();
2.6主函数
Voidmain()
{
接受命令(选择要执行的操作);
处理命令;
输出结果;
}
3详细设计
#include
#include
#include
#defineN30001
voidmain()
{
inti,j,n,k;
intn1,t;
inta[N],b[N],c[3],d[3];
clock_tstart,finish;
inttime1,time2,time3;
输入设计
printf("*************************数据结构排序综合**************************\n");
printf("\n输入要产生的随机数个数:
");
scanf("%d",&n);
srand((unsigned)time(NULL));
for(i=0;i a[i]=rand(); //插入排序 for(i=0;i b[i]=a[i]; printf("---------------------\n"); printf("\t插入排序\n"); printf("---------------------\n"); start=clock(); for(i=1;i { t=b[i]; j=i-1; while(b[j]>t&&j>=0) { b[j+1]=b[j]; j--; } if(j! =(i-1))//第i个数字比前面的都大,不需要重新插入 { b[j+1]=t; } } for(i=n-1;i>=0;i--) printf("%d ",b[i]); finish=clock(); c[0]=finish-start; printf("\n插入排序耗时%d毫秒! \n\n\n",c[0]); //起泡排序 for(i=0;i printf("-----------------------\n"); printf("\t起泡排序\n"); printf("-----------------------\n"); start=clock(); n1=n-1; while(n1>0) { j=0; for(i=0;i if(b[i]>b[i+1]) { t=b[i]; b[i]=b[i+1]; b[i+1]=t; j=i; } n1=j; printf("%d ",t); } finish=clock(); c[1]=finish-start; printf("\n起泡排序耗时%d毫秒! \n\n\n",c[1]); //简单选择排序 for(i=0;i b[i]=a[i]; printf("-------------------------\n"); printf("\t简单选择排序\n"); printf("-------------------------\n"); start=clock(); for(i=1;i { k=n-1; for(j=k-1;j>i-1;j--) { if(b[j] k=j; } if(k! =i-1) { t=b[i-1]; b[i-1]=b[k]; b[k]=t; } } for(i=n-1;i>=0;i--) printf("%d ",b[i]); finish=clock(); c[2]=finish-start; printf("\n简单选择排序耗时%d毫秒! \n\n\n",c[2]); //寻找两种最快方法 for(i=0;i<3;i++) { d[i]=c[i]; } for(i=0;i<3;i++) { for(j=i+1;j<3;j++) { if(d[i]>d[j]) { t=d[i]; d[i]=d[j]; d[j]=t; } } } //printf("%d",c[0]); printf("排序这组数据最快的两组排序法是: \n"); if(d[0]==c[0]) printf("插入排序: %d毫秒\n",d[0]); if(d[0]==c[1]) printf("起泡排序: %d毫秒\n",d[0]); if(d[0]==c[2]) printf("简单选择排序: %d毫秒\n",d[0]); if(d[0]! =d[1]) { if(d[1]==c[0]) printf("插入排序: %d毫秒\n",d[1]); if(d[1]==c[1]) printf("起泡排序: %d毫秒\n",d[1]); if(d[1]==c[2]) printf("简单选择排序: %d毫秒\n",d[1]); } } 4调试结果 数据由系统随机产生,不需要输入测试数据,产生数据元素的个数由用户输入。 6课程设计总结 通过这次课程设计的学习让我学会了许多,加深了对数据结构排序算法的认识。 在这次课程设计中,独立完成了每种排序算法。 排序算法选了三个,包括: 插入排序、气泡排序、简单选择排序。 同时也实现了随机数的生成。 虽然在算法完成的过程中从网上参考了一些资料,但对这次课程设计的成果还是非常满意的。 这次的课程设计还有很多不足之处。 有些排序方法没有些,像堆排序了,快序排序了。 还有就是最后寻找两种最坏的方法时花了很多时间,想了几种方法,开始用结构体,但发现太麻烦了,所以改用了上述方法。 由于时间限制,只在课程设计快结束时完成了产生随机文件这部分,我想以后有时间再来完成它。 同时在完成这个课程设计后,我也学到了很多知识,并能训练的掌握他们了。 首先学会了随机数的产生。 熟练的撑握了C语言的文件读写操作。 撑握了每种排序算法的基本思想,并从同学那里学会了编写程序的一般步骤: 思考问题,写出解决方案,写出伪代码,完成代码,调试程序。 不像以前那样开始就直接写代码。 当然,还包括如何写出操作简便,感觉友好的界面。 但我还是认为自己还有很多不足,希望以后能弥补。 参考书目 [1] 《数据结构(C语言版)》。 严蔚敏,清华大学出版社 [2] 《数据结构习题集(C语言版)》。 严蔚敏,清华大学出版社 [3] 《C语言课程设计案例精编》。 郭翠英,中国水利出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 综合 排序