如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功。
想写出精炼、优秀的代码,不通过不断的锤炼,是很难做到的。
开这个系列的目的是为了自我不断积累。不积跬步无以至千里嘛。
数据结构篇
线性表
双链表的算法
循环链表的算法
栈
队列
算法篇
五大经典算法
经典算法不是真的算法,是一种思路,一种解决问题的方法。
俗语说,万变不离其宗。算法也有一定的套路,大部分都可以归结为五种经典算法。
既然要学习算法,当然应该先从基本套路入手,熟悉了套路,掌握各种算法想必事半功倍。
分治法
动态规划
贪心算法
回溯法
分支定界法
字符串
查找
查找二 树表的查找(涉及大量树结构的概念,不在这里讲述)
排序
排序类别 | 排序方法 | 时间复杂度 | 空间复杂度 | 稳定性 | 复杂性 | ||
平均情况 | 最坏情况 | 最好情况 | |||||
交换排序 | 冒泡排序 | O(n2) | O(n2) | O(n) | O(1) | 稳定 | 简单 |
快速排序 | O(nlog2n) | O(n2) | O(nlog2n) | O(nlog2n) | 不稳定 | 较复杂 | |
插入排序 | 直接插入排序 | O(n2) | O(n2) | O(n) | O(1) | 稳定 | 简单 |
希尔排序 | O(nlog2n) | O(n1.5) | O(1) | 不稳定 | 较复杂 | ||
选择排序 | 简单选择排序 | O(n2) | O(n2) | O(n2) | O(1) | 不稳定 | 简单 |
堆排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) | O(1) | 不稳定 | 较复杂 | |
归并排序 | 归并排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) | O(n) | 稳定 | 较复杂 |
基数排序 | 基数排序 | O(d(n+r)) | O(d(n+r)) | O(d(n+r)) | O(n+r) | 稳定 | 较复杂 |
如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功。
想写出精炼、优秀的代码,不通过不断的锤炼,是很难做到的。
开这个系列的目的是为了自我不断积累。不积跬步无以至千里嘛。
数据结构篇
线性表
双链表的算法
循环链表的算法
栈
队列
算法篇
五大经典算法
经典算法不是真的算法,是一种思路,一种解决问题的方法。
俗语说,万变不离其宗。算法也有一定的套路,大部分都可以归结为五种经典算法。
既然要学习算法,当然应该先从基本套路入手,熟悉了套路,掌握各种算法想必事半功倍。
分治法
动态规划
贪心算法
回溯法
分支定界法
字符串
查找
查找二 树表的查找(涉及大量树结构的概念,不在这里讲述)
排序