zoukankan      html  css  js  c++  java
  • 常见排序算法的时间复杂度

    1、数组中插入元素的时间复杂度:

    最好 最坏 平均
    数组中插入元素 O(1)
    每次都在数组的末尾插入;
    O(n)
    每次都在数组的头部插入;

    2、常见排序算法的时间复杂度

    假设数据量为n。

    ~ 最好 最坏 平均
    基本排序 冒泡(无标志位) O(n^2) O(n^2) O(n^2)
    冒泡(有标志位) O(1)
    说明:已有序,只需1次;
    O(n^2)
    说明:逆序,标志位无效。同上
    O(n^2)
    说明:以有序度作为测量。最好时,有序度为n,逆序度为n(n-1)/2;最差时相反;所以平均是n(n-1)/4;
    插入 O(n)
    说明:已有序,只需比较n次,无需插入;
    O(n^2)
    说明:逆序,比较n次,插入n次,时间复杂度为O(n^2);
    因为:数组插入的最坏时间复杂度为O(n);
    O(n^2)
    说明:比较n次不可变,插入的平均时间复杂度:O(n),所以总的平均时间复杂度为O(n^2);
    选择 O(n^2)
    说明:比较n次,查找最小元素n次,交换为常量 3;
    O(n^2)
    说明:同最好;
    O(n^2)
    递归排序 归并 O(nlogn)
    说明:递归的时间复杂度推算公式见原文。
    merge的时间复杂度为O(n)(实际应该是2n);
    O(nlogn)
    同左
    O(nlogn)
    同左
    快速 O(nlogn)
    说明:递归的时间复杂度推算公式见原文。
    获取分区点的时间复杂度为O(n)。遍历整个数组,然后交换元素。
    O(n^2)
    特别极端的情况。
    O(nlogn)
    线性排序 O(n)<
    说明:实际为O(n*log(n/m))
    n为数据总个数,m个桶。
    O(nlogn)
    只有一个桶的情况,分析见原文和右边。
    暂无
    计数 O(n)
    就是桶排序中m==n的情况。
    同左 暂无
    基数 O(n)
    每位使用桶排序或者计数排序,然后位数是常数,所以时间复杂度可以为O(n)。
    见桶排序和计数排序

    参考:

    1. 排序算法之 冒泡排序 及其时间复杂度和空间复杂度 - YuZhiHui_No1的专栏 - CSDN博客 https://blog.csdn.net/YuZhiHui_No1/article/details/44339711
    2. 计数排序、基数排序和桶排序 - 简书 https://www.jianshu.com/p/ff1797625d66(注:桶排序的时间复杂度分析很不错)
    3. 线性时间排序:计数排序、基数排序、桶排序 - mmdnxh的博客 - CSDN博客 https://blog.csdn.net/qq_28267025/article/details/78149070 (注:包含代码实现,可以参考)
  • 相关阅读:
    吴裕雄--天生自然 Zookeeper学习笔记--Zookeeper 权限控制 ACL
    【机器学习】机器学习基础
    【QT】利用pyqt5实现简单界面
    【Mathtype】安装Mathtype后,word无法粘贴的问题
    【优化方法】牛顿法
    博客样式设置
    2018.8.28 练习赛
    2018.8.27 练习赛
    2018.8.26 练习赛
    2018.8.25 练习赛
  • 原文地址:https://www.cnblogs.com/buwuliao/p/10429260.html
Copyright © 2011-2022 走看看