/Play-with-Algorithms

Code of my MOOC Course <Play with Algorithms>, Both in C++ and Java. Updated contents and practices are also included. 我在慕课网上的课程《算法与数据结构》示例代码,包括C++和Java版本。课程的更多更新内容及辅助练习也将逐步添加进这个代码仓。

Primary LanguageJava

算法与数据结构 - 课程官方代码仓

大家好, 欢迎大家来到我在慕课网上的实战课程《算法与数据结构精解》的官方代码仓。这个代码仓将不仅仅包含课程的所有源代码,还将发布课程的更新相关内容,勘误信息以及计划的更多可以丰富课程的内容,如更多分享,多多练习,等等等等。课程源码暂时只提供C++和Java两种语言的源代码。关于更多语言的支持,今后有时间,我会慢慢更新这个代码仓(不过预计会是蜗牛速了>_<)。大家可以下载、运行、测试、修改。如果你发现了任何bug,或者对课程中的任何内容有意见或建议,欢迎和我联系:)

个人网站liuyubobobo.com

电子邮件liuyubobobo@gmail.com

微博: 刘宇波bobo http://weibo.com/liuyubobobo

知乎: 刘宇波 http://www.zhihu.com/people/liuyubobobo

本代码仓包括

  • 课程更新信息 [整理中]
  • 课程及补充内容源码
  • 课程补充内容 [整理中][不断更新]
  • 课程配套练习 [整理中][不断更新]
  • 课程勘误信息 [整理中]

课程源码目录

第一章 当我们谈论算法的时候,我们在谈论什么? [无代码]
1-1 我们究竟为什么要学习算法 [无代码]
1-2 课程介绍 [无代码]
第二章 排序基础 章节C++源码 章节Java源码
2-1 选择排序 - Selection Sort C++源码 Java源码
2-2 使用模板(泛型)编写算法 C++源码 Java源码
2-3 随机生成算法测试用例 C++源码 Java源码
2-4 测试算法的性能 C++源码 Java源码
2-5 插入排序法 - Insertion Sort C++源码 Java源码
2-6 插入排序法的改进 C++源码 Java源码
2-7 更多关于O(n^2)排序算法的思考 [无代码]
本章课程最终代码 C++源码 Java源码
补充1 冒泡排序法 - Bubble Sort C++源码 Java源码
补充2 希尔排序法 - Shell Sort C++源码 Java源码
第三章 高级排序算法 章节C++源码 章节Java源码
3-1 归并排序法 - Merge Sort [无代码]
3-2 归并排序法的实现 C++源码 Java源码
3-3 归并排序法的优化 C++源码 Java源码
3-4 自底向上的归并排序算法 C++源码 Java源码
3-5 快速排序法 - Quick Sort C++源码 Java源码
3-6 随机化快速排序法 C++源码 Java源码
3-7 双路快速排序法 C++源码 Java源码
3-8 三路快速排序法 C++源码 Java源码
3-9 归并排序和快速排序的衍生问题 [无代码]
本章课程最终代码 C++源码 Java源码
补充1 归并排序的另外一个优化,在merge外申请aux空间 C++源码 Java源码
补充2 自顶向下和自底向上的归并排序的比较 C++源码 Java源码
补充3 ShellSort, MergeSort 和 QuickSort 的比较 C++源码 Java源码
补充4 求逆序数 C++源码 Java源码
补充5 求任意数组第k小(大)的值 C++源码 Java源码
补充6 对链表的O(nlogn)级别的排序 [整理中] [敬请期待]
补充7 更多高级的归并排序算法优化** [整理中] [敬请期待]
补充8 更多高级的快速排序算法优化** [整理中] [敬请期待]
第四章 堆和堆排序 章节C++源码 章节Java源码
4-1 为什么使用堆 [无代码]
4-2 堆的基本存储 C++源码 Java源码
4-3 Shift Up C++源码 Java源码
4-4 Shift Down C++源码 Java源码
4-5 基础堆排序和Heapify C++源码 Java源码
4-6 优化的堆排序 - Heap Sort C++源码 Java源码
4-7 排序算法总结 [无代码]
4-8 索引堆 - Index Heap C++源码 Java源码
4-9 索引堆的优化 C++源码 Java源码
4-10 和堆相关的其他问题 [无代码]
本章课程最终代码 C++源码 Java源码
补充1 优化的Shift Up和Shift Down C++源码 Java源码
补充2 最小堆 C++源码 Java源码
补充3 最小索引堆 C++源码 Java源码
补充4 从0开始索引的最大堆和最小堆 [整理中] [敬请期待]
补充5 从0开始索引的最大索引堆和最小索引堆 [整理中] [敬请期待]
补充6 N个元素中的前M小元素 [整理中] [敬请期待]
补充7 双向优先队列 [整理中] [敬请期待]
补充8 多叉堆 [整理中] [敬请期待]
补充9 更高级的堆结构 [整理中] [敬请期待]
第五章 二分搜索树 章节C++源码 章节Java源码
5-1 二分查找法(Binary Search) C++源码 Java源码
5-2 二分搜索树基础(Binary Search Tree) C++源码 Java源码
5-3 二分搜索树的节点插入 C++源码 Java源码
5-4 二分搜索树的查找 C++源码 Java源码
5-5 二分搜索树的遍历(深度优先遍历) C++源码 Java源码
5-6 层序遍历(广度优先遍历) C++源码 Java源码
5-7 删除最大值,最小值 C++源码 Java源码
5-8 二分搜索树节点的删除(Hubbard Deletion) C++源码 Java源码
5-9 二分搜索树的顺序性 [无代码]
5-10 二分搜索树的局限性 C++源码 Java源码
5-11 树形问题和更多树 [无代码]
本章课程最终代码 C++源码 Java源码
补充1 二分搜索法的floor和ceil C++源码 Java源码
补充2 二分搜索树中的floor和ceil C++源码 Java源码
补充3 二分搜索树中的rank和select [整理中] [敬请期待]
补充4 二分搜索树的非递归实现 [整理中] [敬请期待]
补充5 二分搜索树的另一个应用:Set [整理中] [敬请期待]
补充6 允许重复键值的二分搜索树 [整理中] [敬请期待]
补充7 Trie [整理中] [敬请期待]
补充8 红黑树 [整理中] [敬请期待]
补充9 区间树 [整理中] [敬请期待]
补充10 KD树 [整理中] [敬请期待]
补充11 哈夫曼树 [整理中] [敬请期待]
补充12 树形问题之八皇后问题 [整理中] [敬请期待]
补充13 树形问题之八数码问题 [整理中] [敬请期待]
补充14 树形问题之数独求解 [整理中] [敬请期待]
补充15 树形问题之搬运工求解 [整理中] [敬请期待]
第六章 并查集 章节C++源码 章节Java源码
6-1 并查集基础(Union Find) [无代码]
6-2 Quick Find C++源码 Java源码
6-3 Quick Union C++源码 Java源码
6-4 基于size的优化 C++源码 Java源码
6-5 基于rank的优化 C++源码 Java源码
6-6 路径压缩(Path Compression) C++源码 Java源码
本章课程最终代码 C++源码 Java源码
补充1 使用相同的测试用例测试不同的UF实现 C++源码 Java源码
补充2 迭代和递归实现两种路径压缩的区别 C++源码 Java源码
第七章 图的基础 章节C++源码 章节Java源码
7-1 图论基础 [无代码]
7-2 图的表示 C++源码 Java源码
7-3 相邻节点迭代器 C++源码 Java源码
7-4 图的算法框架 C++源码 Java源码
7-5 深度优先遍历和联通分量 C++源码 Java源码
7-6 寻路 C++源码 Java源码
7-7 广度优先遍历和无权图的最短路径 C++源码 Java源码
7-8 迷宫生成,PS抠图 —— 更多无权图的应用 [无代码]
本章课程最终代码 C++源码 Java源码
补充1 Floodfill 算法 [整理中] [敬请期待]
补充2 扫雷游戏模型 [整理中] [敬请期待]
补充3 走迷宫 [整理中] [敬请期待]
补充4 迷宫生成 [整理中] [敬请期待]
补充5 欧拉路径 [整理中] [敬请期待]
补充6 哈密尔顿路径 [整理中] [敬请期待]
补充7 Blue Path 自动求解 [整理中] [敬请期待]
补充8 地图填色问题 [整理中] [敬请期待]
补充9 二分图 [整理中] [敬请期待]
补充10 二分图的最优匹配 [整理中] [敬请期待]
补充11 墙为线条的迷宫生成 [整理中] [敬请期待]
补充12 六边形的迷宫生成 [整理中] [敬请期待]
第八章 最小生成树 章节C++源码 章节Java源码
8-1 有权图 C++源码 Java源码
8-2 最小生成树问题和切分定理 [无代码]
8-3 Prim算法的第一个实现 (Lazy Prim) C++源码 Java源码
8-4 Prim算法的优化 [无代码]
8-5 优化后的Prim算法的实现 C++源码 Java源码
8-6 Kruskal算法 C++源码 Java源码
8-7 最小生成树算法的思考 [无代码]
本章课程最终代码 C++源码 Java源码
补充1 图的最小生成树的个数 [整理中] [敬请期待]
补充2 Vyssotsky Algorithm [整理中] [敬请期待]
第九章 最短路径 章节C++源码 章节Java源码
9-1 最短路径问题和松弛操作(Relaxation) [无代码]
9-2 Dijkstra的算法** [无代码]
9-3 实现Dijkstra算法 C++源码 Java源码
9-4 负权边和Bellman-Ford算法 [无代码]
9-5 实现Bellman-Ford算法 C++源码 Java源码
9-6 更多和最短路径相关的思考 [无代码]
本章课程最终代码 C++源码 Java源码
补充1 SPFA算法 [整理中] [敬请期待]
补充2 有向无环图(DAG)的拓扑排序 [整理中] [敬请期待]
补充3 Floyed算法 [整理中] [敬请期待]
补充4 使用Bellman-Ford求最长路径 [整理中] [敬请期待]
补充5 使用拓扑排序求有向无环图(DAG)的最长路径 [整理中] [敬请期待]
补充6 使用Floyed算法求所有对的最长路径 [整理中] [敬请期待]
第十章 结束语 [无代码]
10-1 总结:算法**,大家加油! [无代码]