数据结构:常见算法的时间复杂度汇总

目录

顺序表

链表

二叉树

图(V是顶点个数,E是边的条数)

1.存储空间:

2.BFS和DFS的时间复杂度

3.最小生成树时间复杂度

4.最短路径时间复杂度

查找的平均查找长度(ASL)

 排序


顺序表

算法操作时间复杂度空间复杂度描述
插入O(n)\需要移动元素,移动结点的平均次数n/2
删除O(n)\需要移动元素,移动结点的平均次数(n-1)/2
按值查找O(n)\指针移动查找对应元素

链表

算法操作时间复杂度空间复杂度描述
头插法创建O(n)\

插入时间为O(1),总时间复杂度为O(n)

尾插法创建O(n)\     插入时间为O(1),总时间复杂度为O(n)
按值查找O(n)\指针移动查找对应元素
   按序查找   O(n)\指针移动到对应位置
插入O(1)\需要从头查找则花费主要用于查找O(n)
删除O(1)\需要从头查找则花费主要用于查找O(n)

二叉树

算法操作时间复杂度空间复杂度描述
二叉树创建O(n)O(n)

   类似先序遍历

二叉树遍历O(n)O(n)     递归遍历操作
二叉排序树插入O(n)\\
 二叉排序树删除  O(n)\\

图(V是顶点个数,E是边的条数)

1.存储空间:

存储结构存储空间
邻接矩阵

O(n^2)

邻接表

无向图O(|V|+2|E|),有向图O(|V|+|E|)

2.BFS和DFS的时间复杂度

广度优先遍历BFS深度优先遍历DFS
邻接矩阵存储O(|V|^2)O(|V|^2)
邻接表存储O(|V|+|E|)

O(|V|+|E|)

3.最小生成树时间复杂度

普里姆算法克鲁斯卡尔算法
时间复杂度O(|V|^2)O(|E|log|E|)

注:普利姆算法不依赖E,适合求解边稠密图的最小生成树;克鲁斯卡尔适合边稀疏而顶点较多的图

4.最短路径时间复杂度

迪杰斯特拉算法弗洛伊德算法
时间复杂度O(|V|^2)O(|V|^3)

5.拓扑排序:由于输出每个顶点的同时还要删除以它为起点的边,故拓扑排序的时间复杂度为O(|V|+|E|)

查找的平均查找长度(ASL)

1.顺序查找

注:若题目未明确提出是成功还是不成功的ASL,则平均查找长度是成功和不成功的平均值:

        ASL平均 =(ASL成功+ASL不成功)/2

 2.有序的顺序查找

3.折半查找 

 

4.分块查找 

 排序