0
点赞
收藏
分享

微信扫一扫

快速排序、归并排序、堆排序的对比

即使是同样的算法,不同的人写的代码,不同的应用场景下执行时间也可能差别很大。下面是一个测试数据:

测试的平均排序时间:数据是随机整数,时间单位是s
数据规模 快速排序 归并排序 希尔排序 堆排序
1000万 0.75 1.22 1.77 3.57
5000万 3.78 6.29 9.48 26.54
1亿 7.65 13.06 18.79 61.31

大数据量下,快速排序优于归并排序优于堆排序。

原因如下:

快速排序 vs 归并排序

当数据量越来越大时,

归并排序:比较次数少,速度慢。

快速排序:比较次数多,速度快。

快速排序的优势越来越明显。

原因分析:个人认为是当数据量越来越大时,尽管归并排序的比较次数较少,但是归并排序后期的合并操作所花费的时间便越来越大,合并操作对整体的效率影响越来越明显,包括后面大量数据的赋值操作等。所以当数据量变大时,不需要专门合并的快速排序的优势就变得越发明显。

 

快速排序 vs 堆排序

堆排序每次取一个最大值和堆底部的数据交换,重新筛选堆,把堆顶的X调整到位,有很大可能是依旧调整到堆的底部(堆的底部X显然是比较小的数,才会在底部),然后再次和堆顶最大值交换,再调整下来,可以说堆排序做了许多无用功。

总结起来就是,快排的最坏时间虽然复杂度高,但是在统计意义上,这种数据出现的概率极小,而堆排序过程里的交换跟快排过程里的交换虽然都是常量时间,但是常量时间差很多。

 

参考文章

归并排序和快速排序比较

快速排序 Vs. 归并排序 Vs. 堆排序——谁才是最强的排序算法


举报

相关推荐

0 条评论