## 数据结构与算法
代码运行环境: window下node 7.8.0
| 算法学习目录 | |
| :--- | :---: |
| **排序基础(3种)**| |
| 选择排序-Selection Sort | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/01-Sorting-Basic/01-Selection-Sort/main.js) |
| 使用模板(泛型)编写算法 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/01-Sorting-Basic/02-Selection-Sort-Using-Template/main.js) |
| 随机生成算法测试用例 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/01-Sorting-Basic/03-Selection-Sort-Generate-Test-Cases/main.js) |
| 测试算法的性能 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/01-Sorting-Basic/04-Selection-Sort-Detect-Performance/main.js) |
| 插入排序法-Insertion Sort | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/01-Sorting-Basic/05-Insertion-Sort/main.js) |
| 插入排序法的改进 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/01-Sorting-Basic/06-Insertion-Sort-Advance/main.js) |
| 冒泡排序法及其优化-Bubble Sort | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/01-Sorting-Basic/07-Bubble-Sort/main.js) |
| **高级排序算法(3种)**| |
| 希尔排序法-Shell Sort | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/02-Sorting-Advance/01-Shell-Sort/main.js) |
| 归并排序法的实现与优化 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/02-Sorting-Advance/02-Merge-Sort/main.js) |
| 自底向上的归并排序算法 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/02-Sorting-Advance/03-Merge-Sort-Bottom-Up/main.js) |
| 快速排序法 - Quick Sort | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/02-Sorting-Advance/04-Quick-Sort/main.js) |
| 随机化快速排序法 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/02-Sorting-Advance/05-Quick-Sort-Deal-With-Nearly-Ordered-Array/main.js) |
| 双路快速排序法 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/02-Sorting-Advance/06-Quick-Sort-Deal-With-Identical-Keys/main.js) |
| 三路快速排序法 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/02-Sorting-Advance/07-Quick-Sort-Three-Ways/main.js) |
| 归并排序和快速排序的衍生问题 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/02-Sorting-Advance/08-Derivative-problem/main.js) |
| **堆**| |
| 最大堆 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/03-Heap/01-Max-Heap-Class-Basic/main.js) |
| 堆排序 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/03-Heap/02-Heap-Sort/main.js) |
| 索引堆-优先队列 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/03-Heap/05-Index-Heap/main.js) |
| 最小堆 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/03-Heap/06-Min-Heap/main.js) |
| **树**| |
| 二分查找法 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/04-Binary-Search-Tree/01-Binary-Search/main.js) |
| BST的实现 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/04-Binary-Search-Tree/02-Binary-Search-Tree-Basics/main.js) |
| **并查集**| |
| Quick Find | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/05-Union-Find/01-Quick-Find/main.js) |
| Quick Union | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/05-Union-Find/02-Quick-Union/main.js) |
| 基于size的优化 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/05-Union-Find/03-Optimize-by-Size/main.js) |
| 基于rank的优化 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/05-Union-Find/04-Optimize-by-Rank/main.js) |
| Path Compression | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/05-Union-Find/05-Path-Compression/main.js) |
| **图**| |
| 图的表示(较完整) | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/06-Graph-Basics/01-Graph-Representation/denseGraph.js) |
| **最小生成树**| |
| 有权图的表示 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/07-Minimum-Span-Trees/01-Weighted-Graph/main.js) |
| Lazy Prim | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/07-Minimum-Span-Trees/02-Lazy-Prim/main.js) |
| Prim算法 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/07-Minimum-Span-Trees/03-Prim/main.js) |
| Kruskal算法 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/07-Minimum-Span-Trees/04-Kruskal/main.js) |
| **最小生成树**| |
| Dijkstra算法的实现 | [js源码](https://github.com/sinner77/play-with-algorithm/blob/master/08-Shortest-Path/Dijkstra/main.js) |