目录
算法简介
一个计算过程,解决问题的方法。
平时我们写的任何代码片段都可以称为算法。
而有一些算法要么执行速度很快,要么能解决某类有趣的问题,
要么兼而有之,通用性强。
大O表示法
指出了算法有多快(并非以秒为单位的速度)
指的是最糟情况下的运行效率
O(n) --> n是操作数
时间复杂度
评估算法运行效率的式子(大O表示法)
空间复杂度
评估算法占内存大小的式子
“空间” 换 “时间”
常见的时间复杂度
O(1) < O(logn) < O(n) < O(nlogn) <
O( n 2 n^2 n2) < O( n 2 n^2 n2logn) < O( n 3 n^3 n3)
快速判断算法的复杂度
1)确定问题规模n
2)循环减半过程 --> logn
3)k层关于n的循环 --> n k n^k nk
算法的稳定与不稳定
简单来说就是,挨着交换的算法稳定;跨着交换的算法不稳定
查找算法
线性查找
二分查找
广度优先搜索
排序算法
排序L(ow)B三人组
冒泡排序
选择排序
插入排序
排序N(ubility)B三人组
快速排序
堆排序
堆排序内置模块heapq
归并排序
其他排序算法
希尔排序
计数排序
桶排序
基数排序
LB与NB总结
排序方法 时间复杂度 空间复杂度 稳定性 代码复杂度
最坏情况 平均情况 最好情况
冒泡排序 O(n^2) O(n^2) O(n) O(1) 稳定 简单
直接选择排序 O(n^2) O(n^2) O(n^2) O(1) 不稳定 简单
直接插入排序 O(n^2) O(n^2) O(n^2) O(1) 稳定 简单
快速排序 O(n^2) O(nlogn) O(nlogn) 平均情况O(logn); 不稳定 较复杂
最坏情况O(n)
堆排序 O(nlogn) O(nlogn) O(nlogn) O(1) 不稳定 复杂
归并排序 O(nlogn) O(nlogn) O(nlogn) O(n) 稳定 较复杂