关于排序,我的实验的结果和教科书上的有些差异
我昨天把我知道的所有排序算法,8种,冒泡,选择,插入,快速,堆排序,归并排序,希尔排序,基数排序,实现了一下,并放在一起比较速度。得到的结果令我有些惊讶。
首先,在debug模式里面。
速度最快的是归并排序,其次是堆排序,第三才是快速排序。
我觉得快速排序在世界上那么广泛的被应用,不是应该最好的吗?我还把快速排序在长度不超过5的时候用插入排序替代,发现优化效果并不明显。
其次,我用的是vs2005,当我把程序做成release版本,运行测试的时候,有一个很奇怪的结果,那就是RadixSort的耗时变得和归并排序一样,最少。我的测试数据都是1000以下的数字,所以RadixSort只需要三次排序,但是就算用整型,RadixSort的耗时顶多乘以4,在我的数据里仍然比快速排序要少。我不明白的是,一方面为什么RadixSort可以被编译器优化那么多,另一方面,为什么《算法导论》里面说因为快速排序对cache有更好的利用,所以实际应用中通常用快速排序。在我的实验里面,release版本,快速排序还比如堆排序。
[解决办法]
说哪种排序最好,要根据具体情况而定,要看看待排序的数的排列情况
一般都选择快速排序,是因为它平均时间复杂度最低,并且稳定性比较好