课程设计报告---排序算法的实现与比较
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》课程设计实验报告
题目:排序算法的实现与比较
目录
一.设计内容和要求----------------------------------2 二.算法思想-------------------------------------------2 三.程序结构-------------------------------------------3 四.使用说明-------------------------------------------4 五.测试结果-------------------------------------------5 六.收获与体会----------------------------------------6
一.设计内容和要求
设计内容:排序算法的实现与比较
要求:编程实现希尔、快速、堆排序、归并排序算法,并利用程序统计每种算法的执行时间。
要求随机产生10000、50000、100000、200000个待排数据存入磁盘文件,从磁盘文件读入待排数据进行排序,并将排序结果写入另一个文件中。
二.算法思想
在本课题中,对常见的4 中排序算法希尔、快速、堆排序、归并排序进行实现,并根据待排数据个数的不同来对各种排序算法的执行时间进行比较,从而比较出在不同的情况下各排序算法的性能。
1.希尔排序
希尔排序是对直接插入排序的一种改进,它的基本思想是:
先将整个待排序记录序列分割成若干个子序列,在子序列内分别进行直接插入排序,待整个序列基本有序时,再对全体记录进行一次直接插入排序。
2.快速排序
快速排序是对气泡排序的一种改进,其基本思想是:首先选
一个轴值(即比较的基准),将待排序记录分割成独立的两部分,左侧记录的关键码均小于或等于轴值,右侧记录的关键码均大于或等于轴值,然后分别对这两部分重复上述过程,直到整个序列有序。
3.堆排序
堆排序是简单选择排序的一种改进,其基本思想是:首先将待
排序的记录序列构造成一个堆,此时,选出了堆中所有记录的最大值即堆顶
记录,然后将它从堆中移走(通常将堆顶记录和堆中最后一个记录交换),并将剩余的记录再调整成堆,这样又找出了次大的记录,依此类推,直到堆中只有一个记录。
4.归并排序
归并排序是一种借助“归并”进行排序的方法,其主要思想是:将若干有序序列逐步归并,最终归并为一个有序序列。
5.计时函数
计时函数使用了Windows API 函数QueryPerformanceFrequency 和QueryPerformanceCounter 来实现毫秒级的计时功能。
该函数接受一个指向函数的指针参数,用于在两次查询机器内部计时器的计插入所需要被计时的代码,再降两次查询之差除以CPU 时钟频率即可得到事件执行的精确时间。
三.程序结构
说明:本程序由main.cpp,sort.h和operate.h三部分组成。
sort.h头文件中实现了希尔,快速,堆排序,归并排序;operate.h头文件中有随机产生待排数据,将数据写入文件,从文件读数据,计时,输出执行时间的函数;main.cpp主函数调用头文件里的函数。
文件函数关系表
四.使用说明
运行程序,可以看到如下:
浏览完说明之后,会出现:
按照步骤,依次执行程序,在按下了1之后,会出现:
在前几步程序执行完了之后,按下3,会出现:
程序显示出每种排序算法的执行时间。
一次程序执行完之后,可循环执行这个程序。
五.测试结果
基本符合题目要求,程序能够实现希尔快速堆排序归并排序四中排序算法,并能够统计每种排序算法的执行时间。
此外,能够随机产生待排数据,存入文件,从磁盘文件读入待排数据进行排序,并能将排序结果存入另一个文件中。
在随机产生的待排数据为10000时,算法的执行时间分别如下:
在随机产生的待排数据个数为50000个时:
在随机产生的待排数据个数为100000个时:
在随机产生的待排数据个数为200000个时:
下面是排序算法执行时间与待排数据关系表:
不同个数的随机产生的待排数据的4种排序算法的执行时间相差不是很大,在待排数据的个数是10000的时候,排序的执行时间不是很长,都是在5ms左右,在待排数据个数变多时,很明显,希尔,堆排序比快速和归并排序的执行时间稍微长一点,但是,希尔和堆排序的执行时间相差不大。
六.收获与体会
通过这次的课程设计,加深了我对希尔,快速,堆,归并排序算法的了解,并通过执行时间了解到这四种算法的性能。
但是,在程序的实现过程中还存在一些问题,随机产生待排数据的时候,先把数据存放在数组中,然后再存入到文件中,这中间浪费了内存空间,在数据量很大的时候,其中的执行时间是可以感觉得到的。