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

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

      

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

    例子


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

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

     

  • 相关阅读:
    算法----(1)冒泡排序
    淘宝爬虫
    爬虫_豆瓣电影top250 (正则表达式)
    爬虫_猫眼电影top100(正则表达式)
    Android 简单调用摄像头
    Android 简单天气预报
    思维模型
    This view is not constrained, it only has designtime positions, so it will jump to (0,0) unless you
    Android studio preview界面无法预览,报错render problem
    Android studio 3.1.2报错,no target device found
  • 原文地址:https://www.cnblogs.com/GoodRnne/p/10635239.html
Copyright © 2011-2022 走看看