




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、南京师范大学数据结构课程设计报告姓名: 学号: 院系: 计算机学院软件工程 班级: 指导教师: 目录数据结构课程设计报告1一、必做题3、设计内容和要求3、算法思想3、程序结构4、使用说明5、测试结果7、问题以及解决方案8、收获与体会8、参考文献9二、选做题9、设计内容和要求9、算法思想9、程序结构10、测试结果12、收获与体会15一、必做题、设计内容和要求 设计内容:四种排序算法的实现以及性能比较 要求:编程实现希尔、快速、堆排序、归并排序算法。要求随机产生10000个数据存入磁盘文件,然后读入数据文件,分别采用不同的排序方法进行排序,并将结果存入文件中。、算法思想
2、0;在本课题中,我们根据要求对大量的随机数分别使用希尔排序,快速排序,堆排序,归并排序进行排序,并根据随机数数量的增加观察四种排序运行所耗时间,进而分析出四种排序方法在不同情况下的性能好坏。 1. 希尔排序希尔排序是对直接插入排序的一种改进,它的基本思想是: 先将整个待排序记录序列划分为若干个小序列,在这些小序列中分别进行直接插入排序;逐步扩大小序列的长度,减少小序列的个数,这样使待排序序列逐渐处于更有序的状态;最后对全体序列进行一次直接插入排序,从而完成整个排序过程。 2. 快速排序快速排序是一个递归的过程,其基本思想是: 从待排序
3、记录中选区一个记录(通常选取第一个记录)为枢轴,其关键字为k,将关键字值小于k的记录移到前面,而将关键字值大于k的移到后面,结果将待排序记录序列分成两个子表,最后将关键字值为k的记录插到分界线处,我们将这个过程成为“划分”,对划分后的子表继续按上述原则进行划分,直到所有子表不超过1为止,此时待排序记录序列就编程了一个有序序列。 3. 堆排序堆排序是选择排序的一种改进,其基本思想是: 首先用待排序的记录序列构造成一个堆,此时选出堆中所有记录的最大者,即堆顶记录,然后将它从堆中移走(通常将堆顶记录和堆中最后一个记录交换),并将剩余的记录再调整成堆,这样又找出了次大的记
4、录,依此类推,直到堆中只有一个记录为止。 4. 归并排序归并排序是通过“归并”进行排序的一种方法。归并就是将两个或两个以上的有序序列合并成一个有序序列的过程。其基本思想是: 将若干有序序列逐步归并,最终归并为一个有序序列。 5. 计时函数 计时函数使用了高精度时间函数QueryPerformanceFrequency()和QueryPerformanceCounter()来实现毫秒级的计时功能。该函数接受一个指向函数的指针参数,用于在两次查询机器内部计时器的位置插入所需要被计时的代码,再将两次查询之差除以CPU 时钟频率即可
5、得到事件执行的精确时间。、程序结构本程序由Sort.cpp、Sort.h和Sorts.h三部分组成。Sort.h头文件中实现了希尔排序,快速排序,堆排序以及归并排序这四种排序;Sorts.h头文件中实现了产生随机待排数据,将数据写入文件,从文件读数据,计算排序所消耗时间,以及输出执行时间的功能;Sort.cpp主函数负责提示操作以及调用头文件里的函数。、使用说明首先,运行程序,出现如下界面,提示用户按照步骤操作,从1到4依次逐步执行、测试结果未完成排序的待排数据已经存入名为a的文本文档中.已完成排序的待排数据已经存入名为b的文本文档中.、问题以及解决方案 本题的难点在于文件的读写和时
6、间的计算。所以,我首先通过书籍和网络复习和查阅这两个方面的相关资料, 结合自己已经学过的或者编写过的程序来完成这个题目。、收获与体会通过这次的课程设计,让我对希尔排序,快速排序,堆排序以及归并排序有写代码的过程中,遇到了一些头疼的问题,比如将数据结构课程设计实验报告 产生的待排序数据存入磁盘文件以及从磁盘文件中读取数据这些文件操作,需要通过翻阅书籍,查找资料才能解决,也意味着基本功还是有欠缺的。程序的优化不仅仅看程序运行的正误,我们需要考虑的还有程序的健壮性,运算效率等各方面。虽然这个程序最后还是较为顺利的完成了,但是编程之路还有很远,需要加强的地方还有很多。、参考文献吉根林,陈波,
7、王琼等。数据结构教程(C+版)。电子工业出版社。二、选做题(hash)、设计内容和要求 设计内容:分别利用Hash技术和二分查找技术统计某个C源程序中的关键字出现的频度。要求:用Hash表存储源程序中出现的关键字,利用Hash查找技术统计该程序中关键字出现的频度,用线性探测法解决Hash冲突;用顺序表存储源程序中出现的关键字,利用二分查找统计该程序中关键字出现的频度。、算法思想 1. 建立Hash表用除留余数法首先确定32个关键字,根据Hash函数申请一个长度为41的类数组,其中有一个string型用来存储所查找的关键字和一个int型用来存储关键字的频度,并初始化
8、为0。2. 解决Hash表冲突用线性探测法首先将整个数组看成一个循环数组,当发生冲突时,从冲突发生的下一个位置起,依次寻找空的Hash地址,直至找到空位将数据存入,或者无法解决冲突,回到原位。3. 建立顺序表用冒泡排序法因为二分查找的顺序表必须是有序的,所以通过冒泡排序建立有序顺序表。4. 文件读取考虑关键字的识别,还要考虑其他字符会不会被误识别。、程序结构程序中的变量:KeyHash KeysHashList41 存放关键字的Hash表,用于Hash查找int HashCount=0 记录Hash查找的比较次数KeyBin KeysBinList32 存放关键字
9、的顺序表,用于二分查找int BinCount=0 记录二分查找的次数class KeyHash Hash存储关键字的类public:KeyHash() freq=0; 初始化此关键字出现的频率为0string kw; 记录此关键字int freq; 记录此关键字出现的频率;class KeyBin 顺序存储关键字的类public:KeyBin() freq=0; 初始化此关键字出现的频率为0string kw; 记录此关键字int freq; 记录此关键字出现的频率;程序中的函数:1、main.cpp文件:main()函数,为主函数,调用其他函数。2、Hash.h文件:包含关于hash查找统
10、计的功能createHash();建立hash表HashSearch();读入文件,进行hash查找统计Print_HSR();输出Hash查找统计的结果Hash_BackToOrigin();/在重新读入文件时,把Hash表状态回到最初状态3、Binary.h文件: 包含关于二分查找统计的功能createBin();建立顺序表BinSearch();读入文件,进行二分查找统计Print_BSR();输出二分查找统计的结果Bin_BackToOrigin();/在重新读入文件时,把顺序表状态回到最初状态、测试结果、收获与体会通过这次课程设计让我对Hash查找技术和二分查找技术有了更加深刻的认识和理解。Hash技术把关键码通过散列函数计算出Key,直接得到关键码的存储地址,大大提高了查找效率。但它也并非
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公开课怎么讲数学试卷
- 心肌梗赛培训课件
- 广东8年级下册数学试卷
- 高中二轮复习数学试卷
- 离职访谈培训课件模板
- 东海县新高一数学试卷
- 德州初中中考数学试卷
- 高职高考15年数学试卷
- 肉毒素课件论文范文
- 2025年04月浙江缙云县卫生健康系统引进高层次人才和紧缺人才人员笔试历年专业考点(难、易错点)附带答案详解
- 车工考评员培训课件
- 站姿走姿坐姿礼仪培训
- 小规模税务视频教学课件
- 苗木种植专项方案(3篇)
- 监督检查酒店管理制度
- 河南省郑州市巩义市2023-2024学年六年级下学期科学6月期末试卷(含答案)
- 业务外包费用管理制度
- 痛风的康复护理课件
- 2024年山西特岗教师招聘笔试真题
- 【英语 北京版】2025年普通高等学校招生选择性考试含答案
- 黑龙江省哈尔滨市第九中学校2024-2025学年高一下学期6月月考化学试题(含答案)
评论
0/150
提交评论