排序算法时间复杂度
数据结构基本操作的复杂度汇总
数据结构基本操作的复杂度汇总
1.顺序表
-
插入操作时间复杂度
- 最好O(1),最坏O(n),平均O(n)
- 移动结点的平均次数n/2
-
删除操作时间复杂度
-
最好O(1),最坏O(n),平均O(n)
-
移动结点的平均次数(n-1)/2
-
-
按值查找时间复杂度
- 最好O(1),最坏O(n),平均O(n)
- 移动结点的平均次数(n+1)/2
2.单链表
- 头插法
- 插入时间为O(1),总时间复杂度为O(n)
- 尾插法O(n)
- 附设了一个表尾结点的指针,插入时间为O(1),总时间复杂度为O(n)
- 按序查找 O(n)
- 按值查找 O(n)
- 插入 O(1)
- 删除 O(1)
其中插入和删除操作,指定结点O(1),需要从头查找则花费主要用于查找O(n)
3.二叉树
-
二叉树的遍历
- 时间复杂度O(n),空间复杂度O(n)
-
二叉排序树
- 插入/删除,时间复杂度O(n)
4.图(V是顶点个数,E是边的条数)
-
邻接矩阵存储空间
- O(n^2)
-
邻接表存储空间
- 无向图O(|V|+2|E|),有向图O(|V|+|E|)
-
十字链表和邻接多重表存储空间
- O(|V|+|E|)
-
广度优先搜索
-
时间复杂度:邻接表O(|V|+|E|),邻接矩阵O(|V|^2)
-
空间复杂度:O(n)
-
-
深度优先搜索
-
时间复杂度:邻接表O(|V|+|E|),邻接矩阵O(|V|^2)
-
空间复杂度:O(n)
-
-
求最小生成树时间复杂度
- Prim算法:O(|V|^2)
- Kruskal算法:O(|E|log|E|)
-
求最短路径时间复杂度
-
Dijkstra算法:O(|V|^2)
-
Floyd算法:O(|V|^3)
-
-
拓扑排序
- 时间复杂度:O(|V|+|E|)