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

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 (注:包含代码实现,可以参考)

猜你喜欢

转载自www.cnblogs.com/buwuliao/p/10429260.html