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

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

      

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

    例子


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

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

     

  • 相关阅读:
    利用Multipeer Connectivity框架进行WiFi传输
    iOS 8创建交互式通知
    iOS开发网络篇—文件的上传
    iOS开发网络篇—发送GET和POST请求(使用NSURLSession)
    iOS之深入了解控制器View的加载
    工厂模式三部曲:工厂方法模式
    iOS web与js的简单交互
    精心整理的十个必须要知道CSS+DIV技巧
    [JQuery代码]超酷鼠标滑过背景高亮效果
    10个可以直接拿来用的JQuery代码片段
  • 原文地址:https://www.cnblogs.com/GoodRnne/p/10635239.html
Copyright © 2011-2022 走看看