OSDN Git Service
(root)
/
oi-wiki
/
main.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
3939439
)
对第k大做了补充说明,因为可能有歧义
author
Banson
<xzcxzcyy@126.com>
Tue, 17 Nov 2020 08:50:40 +0000
(16:50 +0800)
committer
GitHub
<noreply@github.com>
Tue, 17 Nov 2020 08:50:40 +0000
(16:50 +0800)
docs/basic/quick-sort.md
patch
|
blob
|
history
diff --git
a/docs/basic/quick-sort.md
b/docs/basic/quick-sort.md
index
b397138
..
f917934
100644
(file)
--- a/
docs/basic/quick-sort.md
+++ b/
docs/basic/quick-sort.md
@@
-130,6
+130,8
@@
void quick_sort(T arr[], const int len) {
## 线性找第 k 大的数
+第 $k$ 大的数被定义为序列排成升序时,第 $k$ 个位置上的数(编号从0开始)。
+
找第 $k$ 大的数(K-th order statistic),最简单的方法是先排序,然后直接找到第 $k$ 大的位置的元素。这样做的时间复杂度是 $O(n\log n)$ ,对于这个问题来说很不划算。
我们可以借助快速排序的思想解决这个问题。考虑快速排序的划分过程,在快速排序的「划分」结束后,数列 $A_{p} \cdots A_{r}$ 被分成了 $A_{p} \cdots A_{q}$ 和 $A_{q+1} \cdots A_{r}$ ,此时可以按照左边元素的个数( $q - p + 1$ )和 $k$ 的大小关系来判断是只在左边还是只在右边递归地求解。