排序大数据结构课程设计.docx
- 文档编号:4191365
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:10
- 大小:984.32KB
排序大数据结构课程设计.docx
《排序大数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《排序大数据结构课程设计.docx(10页珍藏版)》请在冰豆网上搜索。
排序大数据结构课程设计
《数据结构》课程设计实验报告
题目:
排序(必做题)
姓名:
学号:
指导老师:
时间:
2015.09.03
一、设计内容和要求
设计内容:
排序算法的实现与比较
要求:
编程希望实现希尔、快速、堆排序、归并排序算法。
要求随机产生10000个数据存入数据文件,然后读数据文件,分别采用不同的排序方法进行排序,将结果存入文件中。
二、算法思想描述
1.希尔排序
先将整个待排序记录序列分割成若干个子序列,在在序列内分别进行直接插入排序,待整个序列基本有序时,再对全体记录进行一次直接插入排序。
图解:
2.快速排序
首先选一个枢轴k(即比较的基准),通过一趟排序将待排序记录分割成独立的两部分,前一部分记录的关键码均小于或等于枢轴k,后一部分记录的关键码均大于或等于枢轴k,然后分别对这两部分重复上述方法,直到整个序列有序。
经过一次划分后
枢轴k
再对1、2区分别再进行快速排序
3.堆排序
筛选:
假设当前要筛选结点的编号为k,堆中最后一个结点的编号为m,并且结点k的左右子树均是堆(即r[k+1]~r[m]满足堆的条件),则筛选算法用伪代码可描述为:
图解:
堆排序:
堆排序的基本思想是:
首先将待排序的记录序列构造成一个堆,此时,选出了堆中所有记录的最大者即堆顶记录,然后将它从堆中移走(通常将堆顶记录和堆中最后一个记录交换),并将剩余的记录再调整成堆,这样又找出了次大的记录,以此类推,直到堆中只有一个记录为止。
(1)用大根堆排序的基本思想
①先将初始文件R[1..n]建成一个大根堆,此堆为初始的无序区
②再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换,由此得到新的无序区R[1..n-1]和有序区R[n],且满足R[1..n-1].keys≤R[n].key
③由于交换后新的根R[1]可能违反堆性质,故应将当前无序区R[1..n-1]调整为堆。
然后再次将R[1..n-1]中关键字最大的记录R[1]和该区间的最后一个记录R[n-1]交换,由此得到新的无序区R[1..n-2]和有序区R[n-1..n],且仍满足关系R[1..n-2].keys≤R[n-1..n].keys,同样要将R[1..n-2]调整为堆。
……
直到无序区只有一个元素为止。
(2)大根堆排序算法的基本操作:
①初始化操作:
将R[1..n]构造为初始堆;
②每一趟排序的基本操作:
将当前无序区的堆顶记录R[1]和该区间的最后一个记录交换,然后将新的无序区调整为堆(亦称重建堆)。
注意:
2只需做n-1趟排序,选出较大的n-1个关键字即可以使得文件递增有序。
②用小根堆排序与利用大根堆类似,只不过其排序结果是递减有序的。
堆排序和直接选择排序相反:
在任何时刻堆排序中无序区总是在有序区之前,且有序区是在原向量的尾部由后往前逐步扩大至整个向量为止
图解:
4.归并排序
归并排序是一种借助“归并”进行排序的方法,其主要思想是:
将若干有序序列逐步归并,最终归并为一个有序序列。
归并是将两个或两个以上的有序序列合并成一个有序序列的过程。
基本思想:
将一个具有n个待排序记录的序列看成是n个长度为1的有序序列,然后进行两两归并,得到n/2个长度为2的有序序列,再进行两两归并,得到n/4个长度为4的有序序列,……,直至得到一个长度为n的有序序列为止。
5.性能分析
⏹由于计算机实现的排序算法,没有标准的数据交换操作,因此用交换次数作为衡量性能的标准很不准确,这里计算移动次数,即内存发生赋值操作则计数一次。
⏹即使计算了内存的拷贝操作,实际的性能仍与很多因素关联,因此,程序作了耗时测试,研究在排序表数据结构发生变化时,算法消耗的时间随之变化的规律。
⏹数据量对性能的影响:
◆为降低其他因素的影响,每组数据均按比例平均分布。
◆如:
100个数据则分布在[0,100],500个数据则分布在[0,500]。
运行结果:
希尔
快速
堆
归并
比
较
次
数
10
30
37
50
21
50
324
262
508
220
100
764
703
1248
539
500
6386
5078
8464
3848
1000
14916
11119
18850
8723
5000
111194
74610
117722
55235
10000
260988
162968
255552
120424
15000
406723
251777
400506
189343
20000
606881
347716
550780
260829
25000
809050
474661
705064
334093
移
动
次
数
10
24
19
73
34
50
233
138
531
286
100
500
303
1183
672
500
4804
2109
7073
4488
1000
11292
4688
15076
9976
5000
84389
28571
87078
61808
10000
203186
61861
184225
133616
15000
325076
97459
284983
208616
20000
482342
134012
388429
287232
25000
659156
169596
493845
367232
图表表示:
⏹直观分析:
两张折线图可以看出,数据量在1000以内,各排序算法各方面性能都几乎一致。
数据增多至一定值时,各算法开始各自的稳定增长,但相互之间有明显差别。
1000-15000时,希尔和堆排序仍有重叠迹象,15000后,按照希尔、堆、快速、归并的顺序,可近似认为前者斜率分别是后者的2倍。
⏹理论性能:
移动操作时间、空间复杂度均远超过比较操作,因此,以移动次数衡量,快速排序性能最好。
综合比较、移动次数来看,仍然是快速排序性能最好,归并次之,但这仅是理论分析,实际运行时,还要考虑诸多因素,如归并排序大量的递归函数调用及数据移动操作,会占用过多的CPU及时间,极大的影响性能。
三、程序结构
四、结果与分析
当测试10000个数据时2次测试结果如下:
当测试100000个数据时5次测试结果如下,可看出快速排序是4个中相对最快的排序方法:
五、收获与体会
1.通过产生随机数文件,我掌握了生成随机数的方法,也基本掌握了文件输入输出的方法。
也通过对每个排序算法的性能(时间)分析,发现快速排序在一般情况下在四种排序中是最快的排序方法。
2.对于测试用的数据,比如用来测试的数据的个数可以设为常量,这样方便为之后的测试做修改。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 排序 数据结构 课程设计