【算法】排序(一)

142 阅读1分钟

关于排序

  1. 总共讲解七种排序
  • 选择排序
  • 快速排序
  • 归并排序
  • 计数排序
  • 冒泡排序
  • 插入排序
  1. 所有的递归都可以写成循环。所以每种排序都有递归写法和循环写法。

递归

特点

  1. 函数不停调用自己,每次调用的参数略有不同(只是通过某种方式调用自己,没有实行真正的功能,比如求最小值)
  2. 当满足某个简单条件时,则实现一个简单的调用(到这才执行求最小值功能,然后逐步回归逐步求最小值)
  3. 最终算出结果

理解

  1. 可以用代入法快速理解递归
  2. 可以用调用栈快速理解递归
递进          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的细节,可以用伪代码