From e035d9c9a21d8f3105f14254c467a43d32c721ab Mon Sep 17 00:00:00 2001 From: Banson Date: Tue, 17 Nov 2020 16:50:40 +0800 Subject: [PATCH] =?utf8?q?=E5=AF=B9=E7=AC=ACk=E5=A4=A7=E5=81=9A=E4=BA=86?= =?utf8?q?=E8=A1=A5=E5=85=85=E8=AF=B4=E6=98=8E=EF=BC=8C=E5=9B=A0=E4=B8=BA?= =?utf8?q?=E5=8F=AF=E8=83=BD=E6=9C=89=E6=AD=A7=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- docs/basic/quick-sort.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/basic/quick-sort.md b/docs/basic/quick-sort.md index b397138f..f9179346 100644 --- 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$ 的大小关系来判断是只在左边还是只在右边递归地求解。 -- 2.11.0