关于排序
- 总共讲解七种排序
- 选择排序
- 快速排序
- 归并排序
- 计数排序
- 冒泡排序
- 插入排序
- 所有的递归都可以写成循环。所以每种排序都有递归写法和循环写法。
递归
特点
- 函数不停调用自己,每次调用的参数略有不同(只是通过某种方式调用自己,没有实行真正的功能,比如求最小值)
- 当满足某个简单条件时,则实现一个简单的调用(到这才执行求最小值功能,然后逐步回归逐步求最小值)
- 最终算出结果
理解
- 可以用代入法快速理解递归
- 可以用调用栈快速理解递归
递进 min([2,4,3,1])
递进 4>2 === min([2,min([4,3,1])])
递进 3>2 === min([2,min([4,min([3,1])])])
递进 2<=2 === min([2,min([4,Math.min.apply(null,[3,1])])])
回归 === min([2,min([4,1])])
回归 2<=2 === min([2,Math.min.apply(null,[4,1])])
回归 === min([2,1])
回归 2<=2 === Math.min.apply(null,[2,1])
回归 === 1
递进 sort([2,4,3,1])
递进 4>2 === [1,sort([2,4,3])]
递进 3>2 === [1,[2,sort([4,3])]]
回归 2<=2 === [1,[2,[3,4]]]
回归 2<=2 === [1,[2,3,4]]
回归 2<=2 === [1,2,3,4]
循环
- 循环有很多细节要考虑。
- 真的要举个例子来分析分析
- 尤其要注意边界条件。i在哪里停下。
算法学习总结
战略上藐视敌人,战术上重视敌人
特点
- 思路都很简单
- 细节都很多
- 多画表,多画图,多log
- 如果实在不想陷入JS的细节,可以用伪代码