数据结构排序综合课程设计报告
更新时间:2023-12-01 22:32:01 阅读量: 教育文库 文档下载
《数据结构》 课程设计报告
专 业 计算机科学与技术 班 级 (1)
姓 名 王昕 学 号 20101308003 指导教师 顾韵华 起止时间 2011.10~2011.12
课程设计:排序综合
一、任务描述
(1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。
(2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。
二、问题分析
1、功能分析
分析设计课题的要求,要求编程实现以下功能:
(1)显示随机数:调用Dip()函数输出数组a[]。数组a[]中保存有随机产生的随机数。 (2)直接选择排序:通过n-I次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换之。
(3)冒泡排序:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。
(4)希尔排序:先将整个待排记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。
(5)直接插入排序:将一个记录插入到已排序好的有序表中,从而得到一个新的、记录数增1的有序表。设整个排序有n个数,则进行n-1趟插入,即:先将序列中的第1个记录看成是一个有序的子序列,然后从第2个记录起逐个进行插入,直至整个序列变成按关键字非递减有序列为止。
(6)显示各排序算法排序后的的数据和时间效率,并比较找出其中2种较快的方法。
2、数据对象分析
排序方式:直接选择排序、冒泡排序、希尔排序、直接插入排序
显示排序后的的数据和时间效率。
三、数据结构设计
1.主要全程变量及数据结构 数据结构:
typedef struct {
KeyType key; InfoType otherinfo;
}RedType; typedef struct {
RedType r[MAXSIZE+1];
int length;
}SqList;
2.算法的入口参数及说明 #include
#define LT(a,b) ((a)<(b)) //宏定义
typedef int KeyType; //定义关键字KeyType为int typedef int InfoType; //定义关键字InfoType为int typedef struct{ //RedType结构定义 KeyType key;
InfoType otherinfo; //记录中其他信息域的类型 }RedType;
typedef struct{ //SqList结构定义 RedType r[MAXSIZE+1]; //定义大小 int length; //length为待排记录个数 }SqList;
四、功能设计
(一)主控菜单设计
为实现排序的操作功能,首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。
程序运行后,给出11个菜单项的内容和输入提示,如下:
欢迎来到排序综合系统! 菜单
(1)---直接插入排序 (2)---直接选择排序 (3)---冒泡排序 (4)---快速排序 (5)---堆排序
(6)---时间效率比较 (7)---显示随机数 (0)---退出系统
请在上述序号中选择一个并输入:
(二)程序模块结构
由课题要求可将程序划分为以下几个模块(即实现程序功能所需的函数): ? ? ? ? ?
(三)函数调用关系
主控菜单项选择函数menu_select() 插入排序函数:InsertSort() 选择排序函数:SelectSort() 冒泡排序函数:BubbleSort() 堆排序函数:heapsort()
程序的主要结构(函数调用关系)如下图所示。
其中main()是主函数,它进行菜单驱动,根据选择项1~0调用相应的函数。
(四)函数实现
#include
void Wrong() {
printf(\按键错误!\\n\getchar(); }
void Disp(int a[]) {
int i;
system(\
for(i=0;i if((i-1)==9) printf(\ printf(\ } } void InsertSort(int a[],int p) //插入排序 { int i,j,temp; fclose(fp);return(time); } double Tquicksort(int a[],int n,int p) { int i; int b[N]; for(i=0;i b[i]=a[i]; LARGE_INTEGER m_liPerfFreq={0}; QueryPerformanceFrequency(&m_liPerfFreq); LARGE_INTEGER m_liPerfStart={0}; QueryPerformanceCounter(&m_liPerfStart); quicksort(b,N,p); LARGE_INTEGER liPerfNow={0}; QueryPerformanceCounter(&liPerfNow); double time=liPerfNow.QuadPart - m_liPerfStart.QuadPart; time/=m_liPerfFreq.QuadPart; if(p!=6) {Disp(b);getchar(); } printf(\用快速排序法用的时间为%f秒;\ FILE *fp;fp=fopen(\快速排序.txt\ for(i=0;i fprintf(fp,\ fclose(fp); return(time); } void BubleSort(double a[]) //时间数组的冒泡排序 { int i,j; double temp; for(i=1;i<6;i++) { for(j=4;j>=i;j--) if(a[j+1] temp=a[j+1]; a[j+1]=a[j]; a[j]=temp; } } } void menu() { printf(\欢迎来到排序综合系统! \\n\printf(\printf(\printf(\菜 单 \\n\printf(\printf(\printf(\直接插入排序 \\n\printf(\直接选择排序 \\n\printf(\冒泡排序 \\n\printf(\快速排序 \\n\printf(\堆排序 \\n\printf(\时间效率比较 \\n\printf(\显示随机数 \\n\printf(\退出系统 \\n\printf(\请在上述序号中选择一个并输入: \} void main() { int i,p,a[N]; srand((int)time(NULL)); /*随机种子*/ for(i=0;i a[i]=rand()P000+1; while(1) { system(\ menu(); scanf(\ if(p==0) { printf(\>谢谢使用!\\n\ getchar(); break; } double TIMES[5],TIMES1[5];//时间数组 switch(p) { case 1:TInsertSort(a,p);printf(\请按任意键继续...\ case 2:TSelectSort(a,p);printf(\请按任意键继续...\ case 3:TBubbleSort(a,p);printf(\请按任意键继续...\ case 4:Tquicksort(a,N,p);printf(\请按任意键继续...\ case 5:Theapsort(a,N,p);printf(\请按任意键继续...\ case 6:system(\ TIMES1[1]=TIMES[1]=TInsertSort(a,p);TIMES1[2]=TIMES[2]=TSelectSort(a,p); TIMES1[3]=TIMES[3]=TBubbleSort(a,p);TIMES1[4]=TIMES[4]=Tquicksort(a,N,p);TIMES1[5]=TIMES[5]=Theapsort(a,N,p);getchar(); BubleSort(TIMES); printf(\ { printf(\排序这组数据两种较快的排序法分别是:\\n\ if(TIMES[1]==TIMES1[1]) printf(\直接插入排序:%f秒!\\n\ if(TIMES[1]==TIMES1[2]) printf(\直接选择排序:%f秒!\\n\ if(TIMES[1]==TIMES1[3]) printf(\冒泡排序:%f秒!\\n\ if(TIMES[1]==TIMES1[4]) printf(\快速排序:%f秒!\\n\ if(TIMES[1]==TIMES1[5]) printf(\堆排序:%f秒!\\n\ if(TIMES[1]!=TIMES[2]) { if(TIMES[2]==TIMES1[1]) printf(\直接插入排序:%f秒!\\n\ if(TIMES[2]==TIMES1[2]) printf(\直接选择排序%f秒!\\n\ if(TIMES[2]==TIMES1[3]) printf(\冒泡排序%f秒!\\n\ if(TIMES[2]==TIMES1[4]) printf(\快速排序%f秒!\\n\ if(TIMES[2]==TIMES1[5]) printf(\堆排序%f秒!\\n\ } } printf(\请按任意键继续...\ for(i=0;i for(i=0;i default:Wrong();printf(\请按任意键继续...\ } } } 五、测试数据和结果 本程序在VC++环境下实现,下面是对以上测试数据的运行结果。 (1) 主菜单显示如下: (2)各分界面: 主菜单 测试 结果 六、结束语 在这次的数据结构课程设计中,排序综合,通过该题目的设计过程,加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。
正在阅读:
数据结构排序综合课程设计报告12-01
区街道办事处2021年工作总结和2022年生态新城项目建设工作计划08-01
人教版小学语文四年级上册第七单元教学设计01-14
中国矿业大学03-31
2007国际私法试题03-27
2013-2018年中国再生资源行业运行态势与发展趋势分析报告09-10
分化学课后答案--武汉大学--第五版-上册-完整版04-06
大学军训日记第一天02-21
边坡地质灾害防治工程-支挡结构简介09-26
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 数据结构
- 排序
- 课程
- 报告
- 综合
- 设计
- 实验一java基础知识
- 06-四川大学引进人才科研启动经费资助项目申报书
- 人教高中英语必修7 Unit 3 SENTENCE EXPLANATIONS
- 迪卡侬社会实践报告2
- 2019学年浙江省温州市高二上学期期中考试数学试卷含答案及解析
- 梅岭中学2010年七年级上数学试卷期中测试
- 地铁盾构试题
- 三年级必背诗歌及注解15首
- 冰激凌生产过程中常见问题的分析与解决
- 工商银行常见的面试题目
- 李英几何画板课题研究
- 政法委书记在全州政法先进事迹报告会上的主持词
- 自媒体时代对大学生人际关系的影响
- 语法知识在文言文教学中的应用策略
- 音韵学基础知识讲稿
- 简爱练习题及答案
- 3.2 科学素养与生物学素养 - 图文
- 南京市鼓楼区2018年中考二模英语试题含答案
- 华南理工大学2014年湖南学生
- 三年级校本(小学生礼仪常规)教案