首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

关于排序,小弟我的实验的结果和教科书上的有些差异

2012-04-14 
关于排序,我的实验的结果和教科书上的有些差异我昨天把我知道的所有排序算法,8种,冒泡,选择,插入,快速,堆

关于排序,我的实验的结果和教科书上的有些差异
我昨天把我知道的所有排序算法,8种,冒泡,选择,插入,快速,堆排序,归并排序,希尔排序,基数排序,实现了一下,并放在一起比较速度。得到的结果令我有些惊讶。

首先,在debug模式里面。
速度最快的是归并排序,其次是堆排序,第三才是快速排序。

我觉得快速排序在世界上那么广泛的被应用,不是应该最好的吗?我还把快速排序在长度不超过5的时候用插入排序替代,发现优化效果并不明显。

其次,我用的是vs2005,当我把程序做成release版本,运行测试的时候,有一个很奇怪的结果,那就是RadixSort的耗时变得和归并排序一样,最少。我的测试数据都是1000以下的数字,所以RadixSort只需要三次排序,但是就算用整型,RadixSort的耗时顶多乘以4,在我的数据里仍然比快速排序要少。我不明白的是,一方面为什么RadixSort可以被编译器优化那么多,另一方面,为什么《算法导论》里面说因为快速排序对cache有更好的利用,所以实际应用中通常用快速排序。在我的实验里面,release版本,快速排序还比如堆排序。

[解决办法]
说哪种排序最好,要根据具体情况而定,要看看待排序的数的排列情况

一般都选择快速排序,是因为它平均时间复杂度最低,并且稳定性比较好

热点排行