zoukankan      html  css  js  c++  java
  • 快速排序、归并排序、堆排序的对比

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

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

  • 相关阅读:
    web服务器,应用程序服务器,http服务器的区别
    tomcat、weblogic、jboss的区别,容器的作用
    linux系统编辑神器 -vim用法大全
    web弹出对话框
    c#获取打印机列表
    cookie
    lodop打印多页
    lodop判断是否打印成功
    一般处理程序
    让图片在div中居中
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/14446495.html
Copyright © 2011-2022 走看看