zoukankan      html  css  js  c++  java
  • 【算法】常用排序算法总结

      对于不同的算法,其有不同的时间复杂度和空间复杂度,并且稳定性也不一样。其总结如下:

      

      从上面可以看出,不同的排序算法具有不同的特性。再选择使用的时候也应该根据自己的实际需求来进行选择。

    例子


      我们拿C语言中的qsort()函数来举例。 再该函数中对一个数组进行排序的时候,它会先判断数组所占用的内存多大,如果只是KB范围的大小,它将会使用归并排序,因为归并排序的时间复杂度一直为O(nlog n),虽然空间复杂度为O(n),但是KB范围的空间,可以不用计算。对于快排,因为时间复杂度存在不稳定性,由于可能退化。所以会选择归并排序。而当排序数据的容量非常大时,我们这时使用快速排序,为了防止快排的时间复杂度退化,它选择使用了三数取中的办法,来减少时间复杂度退化的情况。另外为了防止快排在递归过程中栈的溢出,因此它选择使用了栈的数据结构来模拟栈的调用。另外,当比较的元素小于等于4个的时候,他就会使用插入排序来进行排序。虽然插入排序的时间复杂度为O(n2),但是这是当数据进行线性增长时的变化规则,如果数据的量非常小,插入排序的效率并不会比快排和归并排序慢(可以参考 y = x2和 y=x log x的曲线图)。

      所以综上,任何一个实际应用的排序算法,都不可能只是单单的一种排序算法实现的,在其中他还会加入大量的优化,以及在不同情况下选择不同的排序算法来解决问题。对于普通的排序算法的熟练掌握,可以更好的理解并结合不同的排序算法。,

     

  • 相关阅读:
    大二下每周总结
    大二下学期之阅读笔记(人月神话)
    大二下学期之阅读笔记(人月神话)
    大二下学期第一次结对作业(第一阶段:地图下钻)
    大二下学期第一次结对作业(第一阶段)
    java 多线程编程之: synchronized
    书籍
    elasticsearch size 设置最大返回条数
    Java 设计模式--策略模式,枚举+工厂方法实现
    Elasticsearch rollover API
  • 原文地址:https://www.cnblogs.com/GoodRnne/p/10635239.html
Copyright © 2011-2022 走看看