本文收集了广泛使用的经典算法,包括排序算法、数据结构等,并且列出了经典算法的大纲方便以后复习串联,如有错误,还望海涵。
由于博主的方向需要,本文超链接是基于python语言,都是比较简明的教程链接。
- 经典算法总结
- 1.排序算法
- 2.数据结构算法
- 2.1 数组
- 2.2 字符串
- 2.3 栈
- 2.4 队列
- 2.5 链表
- 2.6 树
- 2.7 散列表
- 2.8 堆
- 2.9 图
- 3.算法思想
本文所列出的为算法经典解的复杂度,实际上算法可以有多种实现形式。
复杂度的阶级关系如下图所示:
| 算法 | 最坏 | 最好 | 平均 | 空间 |
|---|---|---|---|---|
| 1.冒泡排序 | O(n^2) | Ω(n) | θ(n^2) | O(1) |
| 2.选择排序 | O(n^2) | Ω(n^2) | θ(n^2) | O(1) |
| 3.插入排序 | O(n^2) | Ω(n) | θ(n^2) | O(1) |
| 4.快速排序 | O(n^2) | Ω(n log(n)) | θ(n log(n)) | O(n) |
| 5.归并排序 | O(n log(n)) | Ω(n log(n)) | θ(n log(n)) | O(1) 或 O(n) |
| 6.堆排序 | O(n log(n)) | Ω(n log(n)) | θ(n log(n)) | O(1) |
| 7.桶排序 | O(n^2) | Ω(n+k) | θ(n+k) | O(nk) |
| 8.基数排序 | O(nk) | Ω(nk) | θ(nk) | O(n+k) |
排序算法的分类:
常用数组操作:【传送门】
- 内存地址顺序结构排列的元素集合
常用字符串的操作:【传送门】
- 字符序列,不可变类型,可以被切片
- 对字符串的更改实际上使用了新空间
【传送门】后进先出,顺序栈可以用数组来表示,链栈因为python等高级语言屏蔽掉了指针,所以要使用类体等数据结构来实现
2.4 队列先进先出,可以用python包来实现【传送】,但不建议在算法中调模块,也可以用数组来表示,只需要看你使用的方式,体现出队列的属性即可,链队的实现方式同栈,循环队列的实现方式也可以使用顺序结构+控制来实现。
2.5 链表有单链表,双向链表,循环链表等,这些万变不离其宗,都是链式存储结构。关于链表实现的文章:【传送门】
2.6 树树形结构为非顺序存储结构,根据指针指向的地址的方式生成带树形构造的逻辑空间。
二叉树:根节点仅仅有一个,父节点的子节点最多只能有两个(关于该部分的严格定义本文不做讨论,可以参照网上的资料),常见配合使用的有二叉排序树(二叉查找树)等
主要有hash表等,这些映射的方式效率是极高的,可以快速查找数据。
2.8 堆根据数组元素下标的位置,有:
父节点:(i-1)/2
子左节点:2i+1
子右节点:2i+2
根据公式可以构造最大堆、最小堆,堆只能保证父节点大于子节点的相对有序。根据堆的性质可以执行上升、下降、堆排等操作
图是网状数据结构,可用深度优先、广度优先等方式遍历。关于图的十大经典算法,可以参照这篇文章:图的十大经典算法
五大常用算法有:分治、贪心、动态规划、回溯和分支界定
其他类似地还有双指针、滑动窗口、二分查找、记忆化搜索、滚动哈希、位运算、递归、组合数学、矩阵等。可以自查是否都掌握。
推荐一些很好的教程:
- https://www.cnblogs.com/onepixel/articles/7674659.html
- https://blog.csdn.net/l975764577/article/details/39399077
- https://blog.csdn.net/Edward_Asia/article/details/121419975
收集不易,点个赞吧



