1. 冒泡排序
O(1) O(n平方) 稳定
2. 插入排序-优化为希尔排序
O(1) O(n平方) 稳定
3. 选择排序
O(1) O(n平方) 不稳定
4. 归并排序nlog(n) 分治
O(n) nlog(n) 稳定
5. 快速排序nlog(n) 分治思想
平均时间复杂度 有序度
桶排序 logn
例子:考生分数
计数排序logn
例子:分数比较集中
基数排序logn
例子:手机号
二分查找
查找第一个值等于给定值得元素
查找最后一个值等于给定值得元素
查找第一个大于等于给定值得元素
查找最后一个小于等于给定值得元素
跳表
实际应用基于链表的二分法 - 带多层索引
查找插入删除
时间: Ologn
空间: Ologn
需要动态更新索引(可以联想到平衡二叉树)
按照区间查找数据 红黑树没有跳表效率高
hash表 - 散列表 - 数组的拓展
避免散列冲突
开放寻址法:在原数组中挨个存储相同元素
需要标记已经删除的元素为delete
评价:装载因子不能过大,比较浪费存储空间
链表法
避免dos攻击:运用跳表、红黑树
评价:适合存储比较大的对象,大数据量
装载因子过大,共同需要动态扩容,避免一次性扩容
连续空间>时间>碎片空间
哈希算法
MD5、SHA1、SHA256
应用场景:
安全加密、唯一标识、数据校验、散列函数、负载均衡、数据分片、分布式存储。
要求:
难反向推到、散列冲突低
推广:区块链
二叉树
遍历:O(n)
前中后序
二叉查找树
支持动态数据集合快速插入、删除、查找
删除取巧:标记delete
O(hieght) 小于O(log2n)
平衡二叉查找树
AVL树和红黑树区别,为什么使用红黑树更多
https://blog.csdn.net/zhangvalue/article/details/101483736
查找、删除、插入
AVL树:时间复杂度: O(logn) 旋转次数O(logn)
红黑树:时间复杂度: O(logn) 旋转次数O(logn)
堆排序
实质:完全二叉树
利用大顶堆、小顶堆解决问题:
- 优先级队列
- 合并有序小文件
- 高性能定时器
- 求topK
- 求中位数
- 求n%位数
图
有向图、无向图
邻接矩阵存储方法
邻接表存储方法LinkedList
邻接表中的链表可以替换为红黑树、跳表、散列表、动态有序数组等
搜索示例
顶点数:V 边数:E
- 深度优先遍历DFS
走迷宫,回溯思想
借助递归和栈来实现
搜索出来不是最短路径
空间复杂度O(E)
- 广度优先遍历BFS
地毯式,层层推进
空间复杂度O(V)
经过改造后记录每个顶点与起始定点距离,容易找出n度关系