Skip to content

Commit d0a97e9

Browse files
committed
complete advanced sort
1 parent c31de3a commit d0a97e9

File tree

7 files changed

+16
-5
lines changed

7 files changed

+16
-5
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@
5959
- 递归
6060
- 查找:线性查找和二分查找
6161
- 基本排序算法
62-
- 高级排序算法: 归并排序、堆排序、快排
62+
- 高级排序算法: 归并排序、快排
6363
- 树,二叉树
64+
- 堆与堆排序
6465
- 图,dfs 和 bfs
6566
- python 内置常用数据结构和算法的使用。list, dict, set, collections 模块,heapq 模块
6667
- 面试笔试常考算法

docs/13_高级排序算法/advanced_sorting.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,7 @@
44

55
- [分治法与归并排序](./merge_sort.md)
66
- [快速排序](./quick_sort.md)
7+
8+
在讲完二叉树之后,我们会看下它的应用:
9+
710
- [堆和堆排序](./heap_sort.md)

docs/13_高级排序算法/heap_sort.md

Whitespace-only changes.

docs/13_高级排序算法/quick_sort.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,18 @@ def test_partition():
8989

9090
T(n) = 2T(n/2) + n
9191

92-
上一节我们讲过通过递归树得到它的时间复杂度是 O(nlog(n))
92+
上一节我们讲过通过递归树得到它的时间复杂度是 O(nlog(n))。即便是很坏的情况,比如 pivot 每次都把数组按照 1:9 划分,依然是 O(nlog(n)),感兴趣请阅读算法导论相关章节。
93+
94+
![](quicksort_worst.png)
95+
9396

9497
# 思考题
9598
- 请你补充 quicksort_inplace 的单元测试
9699
- 最坏的情况下快排的时间复杂度是多少?什么时候会发生这种情况?
97100
- 我们实现的快排是稳定的啵?
98101
- 选择基准值如果选不好就可能导致复杂度升高,算导中提到了一种『median of 3』策略,就是说选择 pivot 的时候
99102
从子数组中随机选三个元素,再取它的中位数,你能实现这个想法吗?这里我们的代码很简单地取了第一个元素作为 pivot
103+
- 利用快排中的 partition 操作,我们还能实现另一个算法,nth_element,快速查找一个无序数组中的第 k 大元素,请你尝试实现它并编写单测
100104

101105

102106
# 延伸阅读
65.5 KB
Loading

docs/index.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@
5959
- 递归
6060
- 查找:线性查找和二分查找
6161
- 基本排序算法
62-
- 高级排序算法: 归并排序、堆排序、快排
62+
- 高级排序算法: 归并排序、快排
6363
- 树,二叉树
64+
- 堆与堆排序
6465
- 图,dfs 和 bfs
6566
- python 内置常用数据结构和算法的使用。list, dict, set, collections 模块,heapq 模块
6667
- 面试笔试常考算法
@@ -173,9 +174,12 @@ Python 抽象程度比较高, 我们能用更少的代码来实现功能,同
173174

174175
安装依赖:
175176
```sh
176-
pip install mkdocs # 制作电子书
177+
pip install mkdocs # 制作电子书, http://markdown-docs-zh.readthedocs.io/zh_CN/latest/
177178
# https://stackoverflow.com/questions/27882261/mkdocs-and-mathjax/31874157
178179
pip install https://github.com/mitya57/python-markdown-math/archive/master.zip
180+
181+
# 或者直接
182+
pip install -r requirements.txt
179183
```
180184

181185
编写并查看:

mkdocs.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,3 @@ pages:
2626
- 高级排序算法: '13_高级排序算法/advanced_sorting.md'
2727
- 分治法与归并排序: '13_高级排序算法/merge_sort.md'
2828
- 快速排序: '13_高级排序算法/quick_sort.md'
29-
- 堆与堆排序: '13_高级排序算法/heap_sort.md'

0 commit comments

Comments
 (0)