经典排序算法的时间复杂度和空间复杂度

时间复杂度

在这里插入图片描述
一、常见的七种时间复杂度:大O表示法–Big O notation

  1. O(1):常数复杂度 Constant Complexity
  2. O(log n):对数复杂度 Logarithmic Complexity
  3. O(n): 线性时间复杂度 Linear Complexity
  4. O(n^2): N平方 N square Complexity
  5. O(n^3): N立方 N cubic Complexity
  6. O(2^n):指数 Exponential Growth
  7. O(n!): 阶乘 Factorial

二、任何一个分治或者递归的函数都可以通过这四种方式算出它的时间复杂度:
在这里插入图片描述三、常见的几种时间复杂度:

  1. 二叉树遍历-前序,中序,后序:时间复杂度是多少?——O(n)
    原因:O(n),n 代表二叉树中的节点数。在二叉树中无论是前序,中序还是后序,遍历二叉树的时候,每个节点会访问一次且仅访问一次,
    所以它的时间复杂度是线性与二叉树的节点总数,即O(n)

  2. 图的遍历,时间复杂度是多少?——O(n)
    原因:和二叉树同理,图中的每个节点在遍历过程中会访问一次且仅访问一次,所以是O(n)

  3. 搜索算法,DFS(深度优先),BFS(广度优先)时间复杂度是多少?——O(n)
    原因:访问的节点也只访问一次,所以是O(n),n指的是搜索空间里的节点总数。

  4. 二分查找,时间复杂度是多少?——O(log n)

空间复杂度

一、计算空间复杂度的两条原则:

1、数组长度
如果代码里使用了数组,基本上数组的长度就是你的空间复杂度。
例如:有一个一维数组,数组元素个数为n ,那空间复杂度为O(n)。如果是二维数组,数组的长度为 n 的平方,那空间复杂度就是 n 平方。

2、 递归的深度(特殊说明)
如果有递归,一般情况下递归的深度就是空间复杂度的最大值。

注意:如果代码中既使用了数组又用到了递归,那二者之间的最大值就是你的空间复杂度。

稳定性

稳定性的概念:
假定待排序的记录序列中,存在多个具有相同关键字的记录,若经过排序,这些记录的相对次序保持不变,称这种排序算法是稳定的,否则称为不稳定的。

稳定的排序算法:
1. 冒泡排序
2. 插入排序
3. 归并排序
4. 计数排序
5. 基数排序
6. 桶排序

不稳定的排序算法:
1. 选择排序
2. 快速排序
3. 希尔排序
4. 堆排序

原创文章 209 获赞 264 访问量 11万+

猜你喜欢

转载自blog.csdn.net/Sophia_0331/article/details/106078594