前面给出了所有算法的实现,代码实现可能还有优化的空间,但也可以通过这些算法来实验大致分析每一种算法的优劣。
文章目录- 通过实验对比十大排序算法
- 实验环境
- 一、各个排序算法运行时间对比分析
- 1、基于线性表逻辑实现的排序算法:
- 2、基于二叉树逻辑实现的排序算法:
- 3、基于散列表逻辑实现的排序算法:
- 二、桶的个数对桶排序的影响
- 总结
实验环境
随机生成[0,10000]的随机数,随机数的规模分别为10000,100000。运行3次去平均时间。
一、各个排序算法运行时间对比分析 1、基于线性表逻辑实现的排序算法:分析比较: 从表中可以看出冒泡排序所消耗的时间最大,当数据规模越大,冒泡排序消耗时间与其他几种排序算法消耗时间差距越大。总体来看冒泡排序、选择排序和插入排序都在一个量级上,希尔排序是插入排序的优化,希尔排序的性能得到了很大的提升,和理论的平均复杂度表现大致一致。
2、基于二叉树逻辑实现的排序算法:分析比较: 归并排序、快速排序、堆排序三种排序算法耗时在数量级上是一致的,在相同规模下,排序耗时比冒泡排序、选择排序、插入排序快100倍,1中的算法只有希尔排序能够与之一战。
3、基于散列表逻辑实现的排序算法:分析比较: 桶排序和基数排序耗时竟然与1中的冒泡、选择、插入算法耗时在一个量级上,点都没有体现散列表的优势。这是因为,数据规模太大,桶的个数太少,每个桶中要装的数据就很大,散列表中的链表长度就会很长,散列表的性能就会向链表退化。所以桶排序可以增加桶的个数来提升效率。而基数排序的桶只有10个,没有提升空间,所以基数排序的使用场景是对多个关键码的排序,在对数字的排序并不能展现优势。计数排序是所有排序算法的天花板,比2中的排序算法还快10倍。
二、桶的个数对桶排序的影响随机生成[0,10000]的随机数,数据规模为100000。
随着桶的个数增大,排序算法所消耗的时间图:
结论: 桶的个数越大,使得每个桶中的元素变少,所消耗的时间越小。当桶的个数与数组中最大数字一致时,此时桶排序消耗的时间最小,当每个桶中的元素为1时,这时桶排序所消耗的时间与计数排序一致,这就是桶排序的最好情况。从表中可以看出当桶为10000个时,桶排序的耗时与2中的算法在一个量级,而与计数排序差一个量级,因为生成的随机数始终会有大量的重复数字。
总结
十个算法每一个算法都很金典,都有其存在的意义,由于实验数据的规模和数据范围都会影响每个算法的效率,所以本次实验只能大致从数量级上对比每一个算法的优劣。有的算法可能还能进一步优化提升效率。本次实验只是单纯的对数字进行排序的实验,而实际情况不光是对数字进行排序,所以还得通过实际情况选择适合的排序算法。



