# 算法

斐波那契数列

辗转相除法/欧几里得算法(Euclidean algorithm)

更相减损术

function gcd(p, q) {
    if (q === 0) {
        return p
    }

    var r = p % q
    return gcd(q, r)
}
1
2
3
4
5
6
7
8

排列组合, 穷举法(暴力穷举)

递归

迭代

# 五大常用算法

# 排序算法

稳定性:排序后 2 个相等键值的顺序和排序之前它们的顺序相同

稳定的排序算法:冒泡排序、插入排序、归并排序、计数排序、基数排序、桶排序

不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序

  1. 冒泡排序
  2. 选择排序
  3. 插入排序
  4. 快速排序
  5. 希尔排序
  6. 归并排序
  7. 堆排序
  8. 基数排序
  9. 计数排序
  10. 桶排序

# 查找算法

  1. 顺序查找
  2. 二分查找
  3. 插值查找
  4. 斐波那契查找
  5. 树表查找
  6. 分块查找
  7. 哈希查找

# 参考文档

  1. 五分钟学算法
  2. 程序员必须掌握哪些算法?
  3. 算法从入门到“放弃”(1)- 什么是算法?
  4. 常见数据结构与算法整理总结(下)
  5. 【搞定算法】常见算法题分类总览
  6. 「递归」和「迭代」有哪些区别?
  7. 为什么你学不会递归?告别递归,谈谈我的一些经验
  8. 1.0 十大经典排序算法
  9. 十大经典排序算法(动图演示)
  10. 常用查找算法
  11. [Data Structure & Algorithm] 七大查找算法
  12. 算法精解:约瑟夫(Josephus)问题
  13. 约瑟夫问题
  14. 约瑟夫环——公式法(递推公式)