Loading

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

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

测试的平均排序时间:数据是随机整数,时间单位是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. 堆排序——谁才是最强的排序算法

posted @ 2021-02-25 13:47  拾月凄辰  阅读(1673)  评论(0编辑  收藏  举报