




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、理学院课程设计说明书课 程 名 称: 数据结构与算法 A 设计实践课 程 代 码: 6015059 题 目 三: 排序综合 开 始 时 间: 2015 年 12 月 28 日完 成 时 间: 2016 年 01 月 10 日课程设计成绩:学习态度及平时成绩(30)技术水平与实际能力(20)创新(5)说明书撰写质量(45)总 分(100)指导教师签名: 年 月 日西华大学理学院课程设计说明书数据结构与算法 A 设计实践任务书学院名称: 理学院 课程代码:_6015059_专业: 信科 年级: 2012 一、 设计题目 排序综合(限最多 1 人完成)二、主要内容利用随机函数产生 N 个随机整数(2
2、0000 以上) ,对这些数进行多种方法进行排序。三、具体要求及提交的材料1)至少采用 4 种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序) 。并把排序后的结果保存在不同的文件中。2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比) ,找出其中两种较快的方法。如果采用 4 种或 4 种以上的方法者,可适当加分。测试数据及测试结果请在上交的资料中写明;必须上机调试通过按数据结构课程设计大纲中的要求完成课程设计报告格式。 设计结束后,每个学生必须上交的材料有:1 课程设计报告打印稿一份 2课程设计的源代码电子文档一份
3、四、主要技术路线提示无。五、进度安排共计两周时间,建议进度安排如下:1 选题,应该在上机实验之前完成 2. 需求分析、概要设计可分配 4 学时完成2 详细设计可分配 4 学时 4. 调试和分析可分配 10 学时。2 学时的机动,可提前安排部分提前结束任务的学生答辩六、 推荐参考资料1.冯博琴 等编著, 软件技术基础 (修改版) ,西安交通大学出版社,19972.严蔚敏 等著, 数据结构 ,清华大学出版社,20033.李芸芳 等著, 软件技术基础 (第二版) ,清华大学出版社,20004.徐孝凯 等著, 数据结构(C 语言描述) ,清华大学出版社,2004指导教师 签名日期 年 月 日系 主 任
4、 审核日期 年 月 日西华大学理学院课程设计说明书目 录摘 要 .11 引 言 .22 系统分析 .32.1 功能需求 .32.1.1 总体要求 .32.1.2 本人所做模块.32.2 数据需求.33 详细设计与分析 .431 设计思路.43.2 整体设计方案.53.3 各种操作函数.63.4 主函数 .63.5 编码.94 测试系统 .134.1 设计测试数据.144.2 测试结果与分析.14结 论 .16致 谢 .17参考文献 .18附录 .19排序综合1摘 要排序(sorting 是计箅机程序设计的一种重要操作,它的功能是将一组任意顺序数据元素(记录) ,根据某一个(或几个)关键字按一定
5、的顺序里新排列成为有序的序列。由于待排序的记录数量不同,使得排序过程中涉及的存储器的不同,可将排序方法分为两大类:一类是内部排序,指的是待排序的记录存放在计算机随机存储器中进行的排序过程;另一类是外部排序,指的是待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中尚需要对外存进行访问的排序过程。本次课程设计主要是关于内部排序的。内部排序的方法很多,但就其全面性能而言,很难提出一种被认为是最好的方法,每一种方法都有各自的优缺点,适合在不同的环境(如记录的初始排列状态等)下使用。本次课程设计就是内部排序中的几个常用排序方法。分析了排序的实质,排序的应用,排序的分类,利用 C 语言采用数
6、组存储结构编程实现了本排序综合系统,该系统包含了几种常见的排序方法,有直接插入排序、希尔排序、冒泡排序、快速排序、简单排序。关键词:关键词:内部排序,外部排序,重新排列,关键字西华大学理学院课程设计说明书21 引 言 1. 1 问题的提出排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序。若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。排序算法是数据结构学科经典的内
7、容,其中内部排序现有的算法有很多种,其中包含冒泡排序,直接插入排序,简单选择排序,希尔排序,快速排序,堆排序等,各有其特点。对排序算法比较的分析可以遵循若干种不同的准则,通常以排序过程所需要的算法步数作为度量,有时也以排序过程中所作的键比较次数作为度量。特别是当作一次键比较需要较长时间,例如,当键是较长的字符串时,常以键比较次数作为排序算法计算时间复杂性的度量。当排序时需要移动记录,且记录都很大时,还应该考虑记录的移动次数。究竟采用哪种度量方法比较合适要根据具体情况而定。在下面的讨论中我们主要考虑所用时间作为复杂性的度量。1.2C 语言C 语言既有高级语言的特点,又具有汇编语言的特点;既是一个
8、成功的系统设计语言,有时一个使用的程序设计语言;既能用来编写不依赖计算机硬件的应用程序,又能用来编写各种系统程序;是一种受欢迎、应用广泛的程序设计语言。1.3C 语言发展过程1973 年,美国贝尔实验室的 D.M.RITCHIE 在 B 语言的基础上最终设计出了一种新的语言,他取了 BCPL 的第二个字母作为这种语言的名字,这就是 C 语言。1977 年 Dennis M.Ritchie 发表了不依赖于具体机器系统的 C 语言编译文本可移植的 C 语言编译程序 。1978 年 Brian W.Kernighian 和 Dennis M.Ritchie 出版了名著The C Programmin
9、g Language ,从而使 C 语言成为目前世界上流行最广泛的高级程序设计语言。排序综合31.4 任务与分析前面分析了排序的种类以及过程,因此,本系统实现了几种常用的排序方法, 包括:直接插入排序、希尔排序、冒泡排序、非递归的快速排序、简单排序。2 系统分析2.1 功能需求2.1.1 总体要求 任务:机函数产生 N 个随机整数(20000 以上),对这作数进行多种方法进行排序。要求:1) 至少采用 4 种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。2) 统计每一种排序方法的性能(以上机运
10、行程序所花费的时间为准进行对比),找出其中两种较快的方法。 如果采用 4 种或 4 种以上的方法者,可适当加分。2.1.2 本人所做模块通过对任务的要求分析,我将任务分成了几个模块,从而实现了任务的总体要求。包括了输入模块、选择排序方法模块、输出模块。其中:1、输入模块利用随机函数产生 N 个数(20000 以上),产生的数据个数由用户自己输入。2、选择排序方法模块在菜单中通过输入相应的选项编号来选择采用何种算法排序,包括的排序算法有:直接插入排序、希尔排序、冒泡排序、快速排序、简单排序。3、输出模块输出排序前的,或者排序后的数据元素到屏幕上显示,并且输出以某种算法排序后的数据元素到文件中保存
11、。最后让主函数对这几个模块进行调用,从而实现全部功能。西华大学理学院课程设计说明书42.2 数据需求利用随机函数产生的随机数。3 详细设计与分析31 设计思路1、直接插入排序思路:设有一组关键字K1,K2,,Kn,排序开始便认为 K1 是一个有序的序列,让 K2 插入到表长为 1 的有序序列,使之成为一个表长为 2 的有序序列,让 K3 插入到表长为 2 的有序序列,使之成为个表长为 3 的有序序列,依次类推,最后让 Kn 插入上述表长为 n-1 的有序序列,得到一个表长为 n 的冇序序列。2、希尔排序思路:先取一个正整数 dl(dln),把全部记录分成 dl 个组,所有距离为 dl 的倍数的
12、记录看成是一组,然后在各组内进行插入排序;然后取 d2(d2dl),重复上述分组和排序操作,直到取 di=1,即所有记录成为一个组为此.一般选 dl 约为 n/2,d2 为dl/2,di=l3、冒泡排序思路:依次比较相邻的两个数 ,将小数放在前面,大数放在后面。即在第一趟:首先比较第 n 个和第 n-1 个数,将小数放前, 大数放后,然后比较第 n-1 个数和第 n-2 个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束, 将最小的数放到 了最前。在第二趟:仍从第n 个数开始比较,将小数放前 ,大数放后,一直比较到第二个数(第一的位置上已经是最小的)
13、,第二趟结束,在数第 二的位置上得到一个新的 最小数(其实在整个数列中 是第二小的数)。如此下去, 重复以上过程, 直至最终完成排序。用二循环实现,外循环变 量设 i,内循环变量设为 j。每次进行比较的两个元素都是与内循环 j 有关的,它们可以分别 用 aj和 aj+1标识。4、快速排序思路:以第一个关键字 K1 为控制字,将K1,K2.Kn分成两个子区,使左区的所有关键字小于等于 K1,右区所有关键字大于等于 K1,在子区内数据尚处于无序状态。将右区首、尾指针保存入栈,对左区进行与第(1)步相类似的处理,又得到它的左子区和右子区。排序综合5重复第(1) 、 (2)步,直到左区处理完毕。然后退
14、栈对一个个子区进行相类似的处理,直到栈空。5、简单排序 思路:在 n 个记录中,用两重循环,外层循环 i 从第一个元素 a0开始至最后一个 元素 an-l,内层循环 j 从外层循环所值元素 ai的下个元素 ajl=ai+l开始至最后一个元素 an-l搜索,只要找到比 ai小的元素,便与 ai交换,如此重复执行操作,当外层循环完毕后,全部记录就排序完成了。3.2 整体设计方案 此课题是研究的是排序问题,为了直观和方便,画出流程图如下图 1:图 1 程序总流程图开始调用欢迎界面函数startface()选择操作项产生随机数直接插入排序函数希尔排序函数冒泡排序函数快速排序函数简单选择排序退出该系统保
15、存排序后文件结束西华大学理学院课程设计说明书6通过流程图可以从中看出操作过程以及函数间的调用关系。3.3 各种操作函数根据模块的划分,将函数对模块进行实现,主要函数如下:(1)创建一个数组函数:int creat()(2)输出数组函数:void print(struct element a,int n)(3)保存函数:void save(struct element a,int n,char filename)(4)直接插入排序函数:void insertsort(struct element a,int n)(5)希尔排序函数:void shellsort(struct element a,
16、int n)(6)冒泡排序函数:void bublesort(struct element a,int n)(7)快速排序分区处理:int partition(struct element a,int low,int high)(8)快速排序函数:void quicksort(struct element a,int low,int high)(9)简单排序函数:void selesort(struct element a,int n)3.4 主函数/=通过该函数对其他函数的调用,实现系统功能int _tmain(int argc, _TCHAR* argv)int num,c;bool fl
17、ag=0;clock_t start,end;char file1300=直接插入排序.txt;char file2300=希尔排序.txt;char file3300=冒泡排序.txt;char file4300=快速排序.txt;char file5300=选择排序.txt;while(1)menu();printf(请输入操作选项:);排序综合7scanf(%d,&c);if(c!=1&flag=0)printf(处理错误,请先产生随机数.n);elseswitch(c)case 1:num=creat();print(list,num);printf(n);flag=1
18、;break;case 2:start=clock();insertsort(list,num);end=clock();printf(直接插入排序后的结果:n);print(list,num);save(list,num,file1);printf( The Time:%d msn,end-start);printf(n);break;case 3:start=clock();shellsort(list,num);end=clock();printf(希尔排序后的结果:n);print(list,num);save(list,num,file2);printf( The Time:%d m
19、sn,end-start);printf(n);break;西华大学理学院课程设计说明书8case 4:start=clock();bublesort(list,num);end=clock();printf(冒泡排序后的结果:n);print(list,num);save(list,num,file3);printf( The Time:%d msn,end-start);printf(n);break;case 5:start=clock();quicksort(list,0,num-1);end=clock();printf(快速排序完成!n);printf(快速排序后的结果:n);pr
20、int(list,num);save(list,num,file4);printf( The Time:%d msn,end-start);printf(n);break;case 6:start=clock();selesort(list,num);end=clock();printf(选择排序后的结果:n);print(list,num);save(list,num,file5);printf( The Time:%d msn,end-start);printf(n);break;case 0:exit(1);default:printf(输入错误,请重新输入.n);排序综合9system
21、(pause);return 0; 3.5 编码/=数据类型定义#define size 1000000struct elementint key;listsize;/=直接插入排序模块void insertsort(struct element a,int n)int i,j;struct element x;for(i=1;in;i+)if(ai.keyai-1.key)x=ai;ai=ai-1;for(j=i-1;x.key0)for(i=dk;in;i+)if(ai.key0&x.keyaj.key;j-=dk)aj+dk=aj;aj+dk=x;dk=dk/2;printf(希
22、尔排序完成!n);/=冒泡排序模块void bublesort(struct element a,int n)int i,j;struct element temp;for(i=0;i=i;j-)排序综合11if(aj+1.keyaj.key)temp=aj+1;aj+1=aj;aj=temp;printf(冒泡排序完成!n);/=快速排序模块int partition(struct element a,int low,int high)int i,j;struct element x;i=low;j=high;x=ai;while(ij)while(i=x.key)j-;if(ij)ai=a
23、j;i+;while(ij)&(ai.key=x.key)i+;if(ij)西华大学理学院课程设计说明书12aj=ai;j-;ai=x;return i;void quicksort(struct element a,int low,int high)int i;if(lowhigh)i=partition(a,low,high);quicksort(a,low,i-1);quicksort(a,i+1,high);/=简单排序模块void selesort(struct element a,int n)int i,j,z;struct element temp;for(i=0;in;
24、i+)z=i;for(j=1+i;jaj.key)排序综合13z=j;if(z!=i)temp=ai;ai=az;az=temp;printf(选择排序完成!n);4 测试系统对于所有执行过程,通过图片最好说明问题了:程序开始如图 2 所示:图 2 开始界面图4.1 设计测试数据用随机函数产生的 20 个随机数作为测试实例:西华大学理学院课程设计说明书14图 3 产生随机数4.2 测试结果与分析图 4 直接插入排序结果图图 5 希尔排序结果图排序综合15图 6 冒泡排序结果图图 7 快速排序结果图图 8 简单排序结果图西华大学理学院课程设计说明书16结 论通过这次课程设计的学习让我学会了许多,
25、让我对我们的专业知识有了很大理解! 在这次课程设计中,独立完成了在数组存储结构下的每种排序算法。排序算法共有五个:插入排序、希尔排序、冒泡排序、快速排序、选择排序。同时也实现了随机数的生成。并把排序后的结果保存在不同的文件中。虽然在算法完成的过程中也在网上査阅了一些资料,但对这次课程设计的成果还是比较满意的。同时在完成这个课程设计后,我也学到了很多知识,并能熟练的掌握他们了。熟练的撑握 C 语言的文件读写操作。掌握了每种排序算法的基本思想,并学会了编写程序的一般步骤:思考问题,写出解决方案,写出伪代码,完成代码,调试程序。不像以前那样开始就直接写代码。排序综合17致 谢这次课程设计能够顺利完成
26、,当然要感谢老师和同学的帮助。没有老师的悉心指导和督促,就不可能这么顺利和按时完成任务,真的非常感谢!老师教导我们:首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。程序实现上,设计了简单的菜单界面,将各个功能集中出现在主菜单中,便于调用。在整个过程中周围的同学也给了不少帮助,而且帮忙解决了很多想不通的问题,在此真的非常感激每个人!希望在今后学习中大家一起互相学习,共同进步!编写程序的过程是辛苦与快乐的,程序的编写原则很重要,只要我们在编程,就必须不断改进,才能更好提高编程能力。西华大学理学院课程设计说明书18参考文献1 严蔚敏等编著.数据结构(C语言版
27、).北京:淸华大学出版社.20032 严蔚敏等编著.数据结构题集(C语言版.北京:清华大学出版社.20033李春葆等编著.数据结构教程(C语言版.北京:淸华大学出版社.20064 朱立华等编著.C语言程序设计.北京:人民邮电出版社.2009排序综合19附录#include stdafx.h#include#include#include#define size 1000000/=调用库函数struct elementint key;listsize;/=结构体模板int creat()int i;int num;printf(请输入元素的个数:);scanf(%d,&num);if(n
28、um999999)printf(输入超界!n);return 0;for(i=0;inum;i+)listi.key=rand()%10000;return(num);西华大学理学院课程设计说明书20/=创建一个数组void print(struct element a,int n)int i;for(i=0;in;i+)printf(%5d,ai.key);printf(n);/=输出数组void save(struct element a,int n,char filename)int wj=0;FILE *fp;if(fp=fopen(filename,w)=NULL)printf(fi
29、le writer errorn);for(int m=0;mn;m+)wj=am.key;fprintf(fp,%d%d,wj);fclose(fp);/=保存到文件void insertsort(struct element a,int n)int i,j;排序综合21struct element x;for(i=1;in;i+)if(ai.keyai-1.key)x=ai;ai=ai-1;for(j=i-1;x.key0)for(i=dk;in;i+)if(ai.key0&x.keyaj.key;j-=dk)aj+dk=aj;aj+dk=x;dk=dk/2;西华大学理学院课程设计
30、说明书22printf(希尔排序完成!n);/=希尔排序void bublesort(struct element a,int n)int i,j;struct element temp;for(i=0;i=i;j-)if(aj+1.keyaj.key)temp=aj+1;aj+1=aj;aj=temp;printf(冒泡排序完成!n);/=冒泡排序int partition(struct element a,int low,int high)int i,j;struct element x;i=low;j=high;x=ai;排序综合23while(ij)while(i=x.key)j-;i
31、f(ij)ai=aj;i+;while(ij)&(ai.key=x.key)i+;if(ij)aj=ai;j-;ai=x;return i;void quicksort(struct element a,int low,int high)int i;if(lowhigh)i=partition(a,low,high);quicksort(a,low,i-1);quicksort(a,i+1,high);西华大学理学院课程设计说明书24/=快速排序void selesort(struct element a,int n)int i,j,z;struct element temp;for(
32、i=0;in;i+)z=i;for(j=1+i;jaj.key)z=j;if(z!=i)temp=ai;ai=az;az=temp;printf(选择排序完成!n);/=简单选择排序void menu()printf(ntt*主菜单*n);printf(tt| 1-生成随机排序元素 |n);排序综合25printf(tt| 2-直接插入排序 |n);printf(tt| 3-希尔排序 |n);printf(tt| 4-冒泡排序 |n);printf(tt| 5-快速排序 |n);printf(tt| 6-简单选择排序 |n);printf(tt| 0-退出 |n);printf(tt| |n);printf(n n);/=该系统的菜单int _tmain(int argc, _TCHAR* argv)int num,c;bool flag=0;clock_t start,end;char file1300=直接插入排序.txt;char file2300=希尔排序.txt;char file3300=冒泡排序.txt;char file4300=快速排序.txt;char file5300=选择排序.txt;while(1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏省镇江市东部教育集团2024-2025学年初三下第四次月考试题语文试题含解析
- 江苏省常州市教育会重点中学2025年初三第三次大联考(新课标卷)生物试题含解析
- 南昌航空大学科技学院《犯罪心理学专题》2023-2024学年第二学期期末试卷
- 吉林省长春市第三中学2024-2025学年下学期初三年级七调考试数学试题含解析
- 山西铁道职业技术学院《创新创业理论与技术》2023-2024学年第二学期期末试卷
- 辽宁省大连市海湾高级中学2024-2025学年高三第12次模拟(压轴卷)数学试题试卷含解析
- 四川省宜宾市翠屏区二片区达标名校2025年初三下学期开学质检生物试题含解析
- 山西管理职业学院《录音与编辑技术》2023-2024学年第一学期期末试卷
- 兰州工商学院《影像学》2023-2024学年第一学期期末试卷
- 湘西市重点中学2025年初三一轮复习第四次过关英语试题试卷含答案
- 苯酚的分子组成和结构课件
- 《罗织经》全文及翻译
- GB∕T 26077-2021 金属材料 疲劳试验 轴向应变控制方法
- 维修服务评价表
- 《二次函数图像与性质》学习评价量规
- 哲学专业英语词汇
- 2019版人教版教材习题高中物理必修3
- 第1课 古代埃及-部编版历史九年级上册课件(共16张PPT)
- 安全生产负责人任命书
- 基于内模控制的模糊PID参数的整定外文文献翻译完稿
- 信息经济学第六章_信号发送与信息甄别
评论
0/150
提交评论