###关于排序算法的问题梳理:
衡量一个算法的好坏有两个指标:渐近时间复杂度和渐近空间复杂度
- 第一类:简单排序算法 - 简单选择排序、简单插入排序、冒泡排序 - O(n ** 2)
- 第二类:高级排序算法 - 快速排序、归并排序 - O(n * log2 n)
本文主要介绍冒泡排序和归并排序
####冒泡排序
1 | """ |
归并排序
通过分解再重组来排序
1 | """ |
分治法:分而治之,将大问题拆解
所以能用循环的地方都不用递归
例子:小孩走楼梯
1 | # 爬楼梯 一次可以爬1个、2个、3个台阶 |
例子2:斐波拉契数列的两种解法
1 | def factorial(num): |
斐波拉契优化:
动态规划优化
将求解的中间值储存起来,牺牲空间换取时间
使用动态规划算法,求解的问题有局部最优解或者最优字结构,(把每一次的结果保存下来)
1 | # 1 1 2 3 5 8 13 21 34 55 ... |