From 14a6e107e5476aa30ce4f493de1321fb55881981 Mon Sep 17 00:00:00 2001
From: partychicken <44670668+partychicken@users.noreply.github.com>
Date: Mon, 1 Apr 2019 14:42:37 +0800
Subject: [PATCH] =?utf8?q?=E6=9B=B4=E6=96=B0=E6=8E=92=E5=BA=8F=E9=83=A8?=
=?utf8?q?=E5=88=86=E7=9B=AE=E5=BD=95=E7=BB=93=E6=9E=84=20&=20=E6=B7=BB?=
=?utf8?q?=E5=8A=A0=E6=8E=92=E5=BA=8F=E7=9B=B8=E5=85=B3stl=E5=86=85?=
=?utf8?q?=E5=AE=B9=20=20(#1131)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
* Update structure of sort
* move stl-sort out of quick-sort
* Update merge sort
* Update mkdocs.yml
* Update mkdocs.yml
* Update basic.md
* Update merge-sort.md
* Update stl-sort.md
* Update bucket-sort.md
* Update bucket-sort.md
* Update bucket-sort.md
å°å äºä¸ªæ¬å·ããã
---
docs/basic/bubble-sort.md | 23 +++++
docs/basic/bucket-sort.md | 11 ++
docs/basic/heap-sort.md | 5 +
docs/basic/insertion-sort.md | 4 +
docs/basic/merge-sort.md | 52 ++++++++++
docs/basic/quick-sort.md | 41 ++++++++
docs/basic/radix-sort.md | 17 +++
docs/basic/selection-sort.md | 3 +
docs/basic/shell-sort.md | 8 ++
docs/basic/sort-intro.md | 23 +++++
docs/basic/sort.md | 241 -------------------------------------------
docs/basic/stl-sort.md | 112 ++++++++++++++++++++
docs/basic/use-of-sort.md | 9 ++
docs/graph/basic.md | 2 +-
mkdocs.yml | 14 ++-
15 files changed, 322 insertions(+), 243 deletions(-)
create mode 100644 docs/basic/bubble-sort.md
create mode 100644 docs/basic/bucket-sort.md
create mode 100644 docs/basic/heap-sort.md
create mode 100644 docs/basic/insertion-sort.md
create mode 100644 docs/basic/merge-sort.md
create mode 100644 docs/basic/quick-sort.md
create mode 100644 docs/basic/radix-sort.md
create mode 100644 docs/basic/selection-sort.md
create mode 100644 docs/basic/shell-sort.md
create mode 100644 docs/basic/sort-intro.md
delete mode 100644 docs/basic/sort.md
create mode 100644 docs/basic/stl-sort.md
create mode 100644 docs/basic/use-of-sort.md
diff --git a/docs/basic/bubble-sort.md b/docs/basic/bubble-sort.md
new file mode 100644
index 00000000..0db935d1
--- /dev/null
+++ b/docs/basic/bubble-sort.md
@@ -0,0 +1,23 @@
+å泡æåºæ¯ä¸ç§ç¨³å®çæåºæ¹æ³ã
+
+以ååºä¸ºä¾ï¼å泡æåºæ¯æ¬¡æ£æ¥ç¸é»ä¸¤ä¸ªå
ç´ ï¼å¦æåé¢çå
ç´ å¤§äºåé¢çå
ç´ ï¼å°±å°ç¸é»ä¸¤ä¸ªå
ç´ äº¤æ¢ãå½æ²¡æç¸é»çå
ç´ éè¦äº¤æ¢æ¶ï¼æåºå°±å®æäºã
+
+ä¸é¾åç°ï¼æ们æå¤éè¦æ«æ $n$ éæ°ç»æè½å®ææåºã
+
+```cpp
+void bubble_sort() {
+ for (int i = 1; i <= n; i++) {
+ bool flag = false;
+ for (int j = 1; j < n; j++)
+ if (a[j] > a[j + 1]) {
+ flag = true;
+ int t = a[j];
+ a[j] = a[j + 1];
+ a[j + 1] = t;
+ }
+ if (!flag) break; //å¦æ没ææ§è¡äº¤æ¢æä½ï¼è¯´ææ°åå·²ç»æåº
+ }
+}
+```
+
+å¨åºåå®å
¨æåºæ¶ï¼è¯¥ç®æ³åªééåä¸éæ°ç»ï¼ä¸ç¨æ§è¡ä»»ä½äº¤æ¢æä½ï¼æ¶é´å¤æ度为 $O(n)$ ãå¨æåæ
åµä¸ï¼å泡æåºè¦æ§è¡ $\frac{(n-1)n}{2}$ 次交æ¢æä½ï¼æ¶é´å¤æ度为 $O(n^2)$ ãå¨å¹³åæ
åµä¸ï¼å泡æåºçæ¶é´å¤æ度ä¹æ¯ $O(n^2)$ ã
\ No newline at end of file
diff --git a/docs/basic/bucket-sort.md b/docs/basic/bucket-sort.md
new file mode 100644
index 00000000..4784e112
--- /dev/null
+++ b/docs/basic/bucket-sort.md
@@ -0,0 +1,11 @@
+计æ°æåºä¹ç§°æ¡¶æåºï¼å¯ä»¥å¨ $O(n)$ çæ¶é´å¤æ度å
对æ°ç»è¿è¡æåºï¼ä½æ¯å®ç空é´å¤æ度ä¸éè¦æåºçæ°ç»çå¼åç¸å
³ã
+
+ä½å®é
æä½æ¶ï¼ç±äºæ¶ç©ºåé¶ï¼æ¶é´å¤æ度åºä¸º $O(\max\left(n,U\right))$ï¼å
¶ä¸ $U$ 代表æ°ç»å
ç´ çå¼å大å°ã
+
+!!! warning "注"
+ 注æåºå **åºæ°æåº** ä¸ **桶æåº**
+
+ç®æ³æµç¨å°±æ¯è®°å½æ¯ä¸ä¸ªæ°åºç°äºå¤å°æ¬¡ï¼ç¶åä»å°å°å¤§ä¾æ¬¡è¾åºã
+
+ä¸è¬èèçæ¯æä¸èå´å
çæ´æ°ï¼ä½æ¯è®¡æ°æåºä¹å¯ä»¥å[离æ£å](/misc/discrete)ä¸èµ·ä½¿ç¨ï¼æ¥å¯¹æµ®ç¹æ°ã大æ´æ°è¿è¡æåºã
+
diff --git a/docs/basic/heap-sort.md b/docs/basic/heap-sort.md
new file mode 100644
index 00000000..0c3c4230
--- /dev/null
+++ b/docs/basic/heap-sort.md
@@ -0,0 +1,5 @@
+对ææè®°å½å»º[å ](/ds/heap/)
+
+æ¯æ¬¡ååºå 顶å
ç´ ï¼å°±å¯ä»¥ä¾æ¬¡å¾å°æ好åºçåºåã
+
+æ¶é´å¤æ度为 $O(n\log n)$ ã
\ No newline at end of file
diff --git a/docs/basic/insertion-sort.md b/docs/basic/insertion-sort.md
new file mode 100644
index 00000000..e5e773de
--- /dev/null
+++ b/docs/basic/insertion-sort.md
@@ -0,0 +1,4 @@
+æå
¥æåºä¾æ¬¡å¤çå¾
æåºçè®°å½ï¼æ¯ä¸ªè®°å½åä¹åå¤çè¿çåºåä¸çè®°å½è¿è¡æ¯è¾ï¼ç¶åæå
¥å°å
¶ä¸éå½çä½ç½®ã
+
+æ¶é´å¤æåº¦æ¯ $O(n^2)$ ã
+
diff --git a/docs/basic/merge-sort.md b/docs/basic/merge-sort.md
new file mode 100644
index 00000000..f4c4ec18
--- /dev/null
+++ b/docs/basic/merge-sort.md
@@ -0,0 +1,52 @@
+## ç®æ³
+
+å½å¹¶æåºæ¯ä¸ç§éç¨äº[åæ²»](/basic/divide-and-conquer)ææ³çæåºç®æ³ï¼å
¶æ¬è´¨æ¯ä¸ç§ [CDQ åæ²»](/misc/cdq-divide)ã
+
+å½å¹¶æåºå为ä¸ä¸ªè¿ç¨ï¼
+
+1. å°æ°åéæåå为两é¨åï¼å¨ååååæ¶æ¶é´å¤æ度为 $O\left(n\log{n}\right)$ ï¼
+2. éå½å°åå«å¯¹ä¸¤ä¸ªååºåè¿è¡å½å¹¶æåº
+3. å并两个ååºå
+
+ä¸é¾åç°ï¼å½å¹¶æåºçæ ¸å¿æ¯å¦ä½å并两个ååºåï¼å两æ¥é½å¾å¥½å®ç°ã
+
+å
¶å®å并çæ¶åä¹ä¸é¾æä½ã注æå°ä¸¤ä¸ªååºåå¨ç¬¬äºæ¥ä¸å·²ç»ä¿è¯äºé½æ¯æåºçäºï¼ç¬¬ä¸æ¥ä¸å®é
ä¸æ¯æ³è¦æ两个 **æåº** çåºåå并起æ¥ã
+
+```cpp
+void merge(int ll, int rr) {
+ // ç¨æ¥æ a[ll.. rr - 1] è¿ä¸åºé´çæ°æåºã t æ°ç»æ¯ä¸´æ¶åæ¾æåºççæ¬ç¨çã
+ if (rr - ll <= 1) return;
+ int mid = ll + (rr - ll >> 1);
+ merge(ll, mid);
+ merge(mid, rr);
+ int p = ll, q = mid, s = ll;
+ while (s < rr) {
+ if (p >= mid || (q < rr && a[p] > a[q])) {
+ t[s++] = a[q++];
+ // ans += mid - p;
+ } else
+ t[s++] = a[p++];
+ }
+ for (int i = ll; i < rr; ++i) a[i] = t[i];
+}
+```
+
+ç±äº `||` æ¯çè·¯è¿ç®ç¬¦ï¼è¿éé¢ if å¤æçæ
åµæ¯â第ä¸é¨åå·²ç»å®å
¨å并å®äºâæè
â两个é½æ²¡æå并å®ï¼ä¸åä¸ä¸ªçéé¦è¦å¤§äºåä¸ä¸ªâï¼è¿ä¸¤ç§æ
åµé½æ¯è¦æåä¸ä¸ªååºåçéé¦æ¾å°æ°åºåçå½åä½ç½®ä¸ã
+
+## éåºå¯¹
+
+å½å¹¶æåºè¿å¯ä»¥ç¨æ¥æ±éåºå¯¹ç个æ°ã
+
+æè°éåºå¯¹ï¼å°±æ¯æ»¡è¶³ $a_{i} > a_{j}$ ä¸ $i < j$ çæ°å¯¹ $(i, j)$ ã
+
+å¯ä»¥ç¨[æ ç¶æ°ç»](/ds/bit)ã[线段æ ](/ds/segment/)çæ°æ®ç»ææ¥æ±ï¼ä¹å¯ä»¥ç¨å½å¹¶æåºæ¥æ±ã
+
+å
·ä½æ¥è¯´ï¼ä¸é¢å½å¹¶æåºä¸é´æ³¨éæç `ans += mid - p` å°±æ¯å¨ç»è®¡éåºå¯¹ä¸ªæ°ã
+
+æ¯å 为ï¼é£éæé åçæ°æ¾å°åé¢äºï¼è¾å°çæ°æ¾å¨åé¢ï¼ï¼æ以å¨è¿ä¸ªæ°çåæ¥ä½ç½®ä¹åçãæ¯å®å¤§çæ°é½ä¼åå®å½¢æéåºå¯¹ï¼èè¿ä¸ªä¸ªæ°å°±æ¯è¿æ²¡æå并è¿å»çæ°ç个æ°ï¼å³ä¸º `mid - p` ã
+
+使ç¨å½å¹¶æåºæ±éåºå¯¹çæ¶é´å¤æ度ä¹æ¯ $O(n \log n)â$ ã
+
+## åè
+
+
diff --git a/docs/basic/quick-sort.md b/docs/basic/quick-sort.md
new file mode 100644
index 00000000..5f849125
--- /dev/null
+++ b/docs/basic/quick-sort.md
@@ -0,0 +1,41 @@
+## ç®æ³
+
+å¿«éæåºæ¯[åæ²»](/basic/divide-and-conquer)å°æ¥å°ä¸ä¸ªæ°ç»æåºã
+
+å¿«éæåºå为ä¸ä¸ªè¿ç¨ï¼
+
+1. å°æ°ååå为两é¨åï¼ä¸æ¯ç´æ¥åï¼è¦æ±ä¿è¯ç¸å¯¹å¤§å°å
³ç³»ï¼
+2. éå½å°ä¸¤ä¸ªååºåä¸åå«è¿è¡å¿«éæåº
+3. ä¸ç¨å并ï¼å 为æ¤æ¶æ°åå·²ç»å®å
¨æåº
+
+åå½å¹¶æåºä¸åï¼ç¬¬ä¸æ¥å¹¶ä¸æ¯ç´æ¥åæåå两个åºåï¼èæ¯å¨åçè¿ç¨ä¸è¦ä¿è¯ç¸å¯¹å¤§å°å
³ç³»ã
+
+第ä¸æ¥ä¸çåºåå·²ç»åå«æåºä¸ç¬¬ä¸ä¸ªåºåä¸çæ°é½å°äºç¬¬äºä¸ªæ°ï¼æ以ç´æ¥æ¼æ¥èµ·æ¥å°±å¥½äºã
+
+å
·ä½æ¥è¯´ï¼ç¬¬ä¸æ¥è¦æ¯è¦ææ°ååæ两个é¨åï¼ç¶åä¿è¯åä¸ä¸ªåæ°åä¸çæ°é½å°äºåä¸ä¸ªåæ°åä¸çæ°ã
+
+æä¹æä½å¢ï¼ä¸ºäºä¿è¯å¹³åæ¶é´å¤æ度ï¼ä¸è¬æ¯éæºéæ©ä¸ä¸ªæ° m æ¥å½å两个åæ°åçåçã
+
+ä¹åï¼ç»´æ¤ä¸åä¸å两个æé p å qï¼ä¾æ¬¡èèå½åçæ°æ¯å¦æ¾å¨äºåºè¯¥æ¾çä½ç½®ï¼åè¿æ¯åï¼ï¼å½åä½ç½®æ¾å¯¹äºä¹åï¼å移å¨æé继ç»å¤çï¼ç´å°ä¸¤ä¸ªæéç¸éã
+
+å¦æå½åçæ°æ²¡æ¾å¯¹å¢ï¼æ¯å¦è¯´å¦æåé¢çæé q éå°äºä¸ä¸ªæ¯ m å°çæ°ï¼é£ä¹å¯ä»¥äº¤æ¢ p å q ä½ç½®ä¸çæ°ï¼åæ p åå移ä¸ä½ã
+
+å
¶å®ï¼å¿«éæåºæ²¡ææå®åºå¦ä½å
·ä½å®ç°ç¬¬ä¸æ¥ï¼ä¸è®ºæ¯éæ© m çè¿ç¨è¿æ¯ååçè¿ç¨ï¼é½ä¸æ¯åªæä¸ç§å®ç°æ¹æ³ã
+
+注æï¼ä¸è¬æ们说çå¿«éæåºçæ¶é´å¤æ度æ¯å¹³å为 $O(n\log n)$ ï¼æåæ¯ $O(n^2)$ ï¼åªä¸è¿å®è·µä¸å ä¹ä¸å¯è½è¾¾å°æåæ
åµã
+
+å
¶å®ï¼å¨éæ© m çè¿ç¨ä¸ä½¿ç¨ [Median of Medians](https://en.wikipedia.org/wiki/Median_of_medians) ç®æ³ï¼å°±å¯ä»¥ä¿è¯æåæ¶é´å¤æ度为 $O(n\log n)$ ï¼ä½æ¯ç±äºå
¶è¿äºå¤æï¼å®è·µä¸ä¸è¬ä¸ä½¿ç¨ã
+
+## 线æ§æ¾ç¬¬ k 大çæ°
+
+æ¾ç¬¬ k 大çæ°ï¼K-th order statisticï¼ï¼æç®åçæ¹æ³æ¯å
æåºï¼ç¶åç´æ¥æ¾å°ç¬¬ k 大çä½ç½®çå
ç´ ãè¿æ ·åçæ¶é´å¤æåº¦æ¯ $O(n\log n)â$ ï¼å¯¹äºè¿ä¸ªé®é¢æ¥è¯´å¾ä¸åç®ãäºå®ä¸ï¼æ们ææ¶é´å¤æ度 $O(n)â$ ç解æ³ã
+
+èèå¿«éæåºçååè¿ç¨ï¼å¨å¿«éæåºçâååâç»æåï¼æ°å $A_{p} \cdots A_{r}â$ 被åæäº $A_{p} \cdots A_{q}â$ å $A_{q+1} \cdots A_{r}â$ ï¼æ¤æ¶å¯ä»¥æç
§å·¦è¾¹å
ç´ ç个æ°ï¼ $q - p + 1â$ ï¼å k ç大å°å
³ç³»æ¥å¤ææ¯åªå¨å·¦è¾¹è¿æ¯åªå¨å³è¾¹éå½å°æ±è§£ã
+
+å¯ä»¥è¯æï¼å¨æææä¹ä¸ï¼ç¨åºçæ¶é´å¤æ度为 $O(n)$ ã
+
+### åè
+
+
+
+
\ No newline at end of file
diff --git a/docs/basic/radix-sort.md b/docs/basic/radix-sort.md
new file mode 100644
index 00000000..ff84c672
--- /dev/null
+++ b/docs/basic/radix-sort.md
@@ -0,0 +1,17 @@
+åºæ°æåºæ¯å°å¾
æåºç æåæå¤ä¸ªé¨ååå«æ¥æ¯è¾ã
+
+æç
§æåºç çå
å顺åºï¼å为两ç§ï¼
+
+1. é«ä½ä¼å
ï¼MSDï¼
+ å
对é«ä½æåºï¼åæè¥å¹²ååºåï¼å¯¹æ¯ä¸ªååºåæ ¹æ®è¾ä½ä½æåºï¼æ¯ä¸ä¸ªåãåãâ¦â¦ãåãæ¶çè¿ç¨ã
+2. ä½ä½ä¼å
ï¼LSDï¼
+ ä»ä½ä½å¼å§ï¼å¯¹äºæ好çåºåç¨æ¬¡ä½ä½æåºï¼ï¼æ¯æ¬¡æåºçé½æ¯å
¨ä½å
ç´ ï¼æ¯ä¸ä¸ªåãæ¶ãåãæ¶ãâ¦â¦ãåãæ¶çè¿ç¨ã
+
+ä½ä½ä¼å
é度è¾å¿«ï¼ä¾¿äºå¤çï¼æ´å¸¸ç¨ã
+
+åºæ°æåºå¯¹å
³é®ç å¼è¿è¡ $O(\log_r n)$ 次è¿ç®ï¼å æ¤å¤ç n 个ä¸åçå
³é®ç æ¶ï¼åºæ°æåºçæ¶é´ä»£ä»·ä¸º $O(n \log n)$ ã
+
+### åè
+
+ATool çæåºæ¼ç¤ºå¨ç»
+
\ No newline at end of file
diff --git a/docs/basic/selection-sort.md b/docs/basic/selection-sort.md
new file mode 100644
index 00000000..067671bf
--- /dev/null
+++ b/docs/basic/selection-sort.md
@@ -0,0 +1,3 @@
+æ¯æ¬¡æ¾åºç¬¬ i å°çå
ç´ ï¼å°è¿ä¸ªå
ç´ ä¸æ°ç»ç¬¬ i 个ä½ç½®ä¸çå
ç´ äº¤æ¢ã
+
+æ¶é´å¤æ度为 $O(n^2)$ ã
\ No newline at end of file
diff --git a/docs/basic/shell-sort.md b/docs/basic/shell-sort.md
new file mode 100644
index 00000000..477eb5bc
--- /dev/null
+++ b/docs/basic/shell-sort.md
@@ -0,0 +1,8 @@
+Shell æåºæ¯ä»¥å®çåæè
å½åçï¼ä¹ç§°ä¸ºç¼©å°å¢éæåºæ³ãShell æåºå¯¹ä¸ç¸é»çè®°å½è¿è¡æ¯è¾å移å¨ï¼
+
+1. å°å¾
æåºåºåå为è¥å¹²ååºåï¼æ¯ä¸ªååºåçå
ç´ å¨åå§æ°ç»ä¸é´è·ç¸åï¼
+2. 对è¿äºååºåè¿è¡æå
¥æåº
+3. åå°æ¯ä¸ªååºåä¸å
ç´ ä¹é´çé´è·ï¼éå¤ä¸è¿°è¿ç¨ç´è³é´è·åå°ä¸º 1
+
+Shell æåºçå¤æ度åé´è·åºåçéåï¼å°±æ¯é´è·å¦ä½åå°å° 1ï¼æå
³ï¼æ¯å¦âé´è·æ¯æ¬¡é¤ä»¥ 3âç Shell æåºçå¤æåº¦æ¯ $O(n^{3/2})$ ã
+
diff --git a/docs/basic/sort-intro.md b/docs/basic/sort-intro.md
new file mode 100644
index 00000000..134cdc48
--- /dev/null
+++ b/docs/basic/sort-intro.md
@@ -0,0 +1,23 @@
+**æåºç®æ³å¤ç§å¤æ ·**ï¼æ§è´¨ä¹å¤§å¤ä¸åã
+
+## 稳å®æ§
+
+稳å®æ§æ¯æç¸ççå
ç´ ç»è¿æåºä¹åç¸å¯¹é¡ºåºæ¯å¦åçäºæ¹åã
+
+åºæ°æåºã计æ°æåºï¼æ¡¶æåºï¼ãæå
¥æåºãå泡æåºãå½å¹¶æåºæ¯ç¨³å®æåºã
+
+éæ©æåºãå æåºãå¿«éæåºä¸æ¯ç¨³å®æåºã
+
+## æ¶é´å¤æ度
+
+æ¶é´å¤æ度ç¨æ¥è¡¡éä¸ä¸ªç®æ³çè¿è¡æ¶é´åè¾å
¥è§æ¨¡çå
³ç³»ï¼ç±»ä¼¼çæ空é´å¤æ度ï¼ç¨æ¥æè¿°ç®æ³ç空é´æ¶èçè§æ¨¡ã
+
+ç®å计ç®å¤æ度çæ¹æ³ä¸è¬æ¯ç»è®¡âç®åæä½âçæ§è¡æ¬¡æ°ï¼ææ¶åä¹å¯ä»¥ç´æ¥æ°å¾ªç¯çå±æ°æ¥è¿ä¼¼ä¼°è®¡ã
+
+æ¶é´å¤æ度å为æåæ¶é´å¤æ度ãå¹³åæ¶é´å¤æ度ãæ好æ¶é´å¤æ度ççãOI ç«èµä¸è¦èèçä¸è¬æ¯æåæ¶é´å¤æ度ï¼å 为å®ä»£è¡¨çæ¯ç®æ³è¿è¡æ°´å¹³çä¸çï¼å¨è¯æµä¸ä¸ä¼åºç°æ´å·®çç»æäºã
+
+åºäºæ¯è¾çæåºç®æ³çæ¶é´å¤æ度ä¸éæ¯ $O(n\log n)$ çã
+
+å½ç¶ä¹æä¸æ¯ $O(n\log n)$ çï¼æ¡¶æåºçæ¶é´å¤æåº¦æ¯ $O(n)$ ï¼ä½æ¯å®æ¯å¨ãç¨ç©ºé´æ¢æ¶é´ãï¼å®ç空é´å¤æåº¦æ¯ $O($ ææåºçæå¤§æ° $)$
+
+å½å¾
æåºçå
³é®ç åºååºæ¬æåºæ¶ï¼æå
¥æåºæå¿«ã
\ No newline at end of file
diff --git a/docs/basic/sort.md b/docs/basic/sort.md
deleted file mode 100644
index d5891d61..00000000
--- a/docs/basic/sort.md
+++ /dev/null
@@ -1,241 +0,0 @@
-æåºç®æ³å¤ç§å¤æ ·ï¼æ§è´¨ä¹å¤§å¤ä¸åã
-
-## 稳å®æ§
-
-稳å®æ§æ¯æç¸ççå
ç´ ç»è¿æåºä¹åç¸å¯¹é¡ºåºæ¯å¦åçäºæ¹åã
-
-åºæ°æåºã计æ°æåºï¼æ¡¶æåºï¼ãæå
¥æåºãå泡æåºãå½å¹¶æåºæ¯ç¨³å®æåºã
-
-éæ©æåºãå æåºãå¿«éæåºä¸æ¯ç¨³å®æåºã
-
-## æ¶é´å¤æ度
-
-æ¶é´å¤æ度ç¨æ¥è¡¡éä¸ä¸ªç®æ³çè¿è¡æ¶é´åè¾å
¥è§æ¨¡çå
³ç³»ï¼ç±»ä¼¼çæ空é´å¤æ度ï¼ç¨æ¥æè¿°ç®æ³ç空é´æ¶èçè§æ¨¡ã
-
-ç®å计ç®å¤æ度çæ¹æ³ä¸è¬æ¯ç»è®¡âç®åæä½âçæ§è¡æ¬¡æ°ï¼ææ¶åä¹å¯ä»¥ç´æ¥æ°å¾ªç¯çå±æ°æ¥è¿ä¼¼ä¼°è®¡ã
-
-æ¶é´å¤æ度å为æåæ¶é´å¤æ度ãå¹³åæ¶é´å¤æ度ãæ好æ¶é´å¤æ度ççãOI ç«èµä¸è¦èèçä¸è¬æ¯æåæ¶é´å¤æ度ï¼å 为å®ä»£è¡¨çæ¯ç®æ³è¿è¡æ°´å¹³çä¸çï¼å¨è¯æµä¸ä¸ä¼åºç°æ´å·®çç»æäºã
-
-åºäºæ¯è¾çæåºç®æ³çæ¶é´å¤æ度ä¸éæ¯ $O(n\log n)$ çã
-
-å½ç¶ä¹æä¸æ¯ $O(n\log n)$ çï¼æ¡¶æåºçæ¶é´å¤æåº¦æ¯ $O(n)$ ï¼ä½æ¯å®æ¯å¨ãç¨ç©ºé´æ¢æ¶é´ãï¼å®ç空é´å¤æåº¦æ¯ $O($ ææåºçæå¤§æ° $)$
-
-å½å¾
æåºçå
³é®ç åºååºæ¬æåºæ¶ï¼æå
¥æåºæå¿«ã
-
-## å泡æåº
-
-å泡æåºæ¯ä¸ç§ç¨³å®çæåºæ¹æ³ã
-
-以ååºä¸ºä¾ï¼å泡æåºæ¯æ¬¡æ£æ¥ç¸é»ä¸¤ä¸ªå
ç´ ï¼å¦æåé¢çå
ç´ å¤§äºåé¢çå
ç´ ï¼å°±å°ç¸é»ä¸¤ä¸ªå
ç´ äº¤æ¢ãå½æ²¡æç¸é»çå
ç´ éè¦äº¤æ¢æ¶ï¼æåºå°±å®æäºã
-
-ä¸é¾åç°ï¼æ们æå¤éè¦æ«æ $n$ éæ°ç»æè½å®ææåºã
-
-```cpp
-void bubble_sort() {
- for (int i = 1; i <= n; i++) {
- bool flag = false;
- for (int j = 1; j < n; j++)
- if (a[j] > a[j + 1]) {
- flag = true;
- int t = a[j];
- a[j] = a[j + 1];
- a[j + 1] = t;
- }
- if (!flag) break; //å¦æ没ææ§è¡äº¤æ¢æä½ï¼è¯´ææ°åå·²ç»æåº
- }
-}
-```
-
-å¨åºåå®å
¨æåºæ¶ï¼è¯¥ç®æ³åªééåä¸éæ°ç»ï¼ä¸ç¨æ§è¡ä»»ä½äº¤æ¢æä½ï¼æ¶é´å¤æ度为 $O(n)$ ãå¨æåæ
åµä¸ï¼å泡æåºè¦æ§è¡ $\frac{(n-1)n}{2}$ 次交æ¢æä½ï¼æ¶é´å¤æ度为 $O(n^2)$ ãå¨å¹³åæ
åµä¸ï¼å泡æåºçæ¶é´å¤æ度ä¹æ¯ $O(n^2)$ ã
-
-## æå
¥æåº
-
-æå
¥æåºä¾æ¬¡å¤çå¾
æåºçè®°å½ï¼æ¯ä¸ªè®°å½åä¹åå¤çè¿çåºåä¸çè®°å½è¿è¡æ¯è¾ï¼ç¶åæå
¥å°å
¶ä¸éå½çä½ç½®ã
-
-æ¶é´å¤æåº¦æ¯ $O(n^2)$ ã
-
-## Shell æåº
-
-Shell æåºæ¯ä»¥å®çåæè
å½åçï¼ä¹ç§°ä¸ºç¼©å°å¢éæåºæ³ãShell æåºå¯¹ä¸ç¸é»çè®°å½è¿è¡æ¯è¾å移å¨ï¼
-
-1. å°å¾
æåºåºåå为è¥å¹²ååºåï¼æ¯ä¸ªååºåçå
ç´ å¨åå§æ°ç»ä¸é´è·ç¸åï¼
-2. 对è¿äºååºåè¿è¡æå
¥æåº
-3. åå°æ¯ä¸ªååºåä¸å
ç´ ä¹é´çé´è·ï¼éå¤ä¸è¿°è¿ç¨ç´è³é´è·åå°ä¸º 1
-
-Shell æåºçå¤æ度åé´è·åºåçéåï¼å°±æ¯é´è·å¦ä½åå°å° 1ï¼æå
³ï¼æ¯å¦âé´è·æ¯æ¬¡é¤ä»¥ 3âç Shell æåºçå¤æåº¦æ¯ $O(n^{3/2})$ ã
-
-## éæ©æåº
-
-æ¯æ¬¡æ¾åºç¬¬ i å°çå
ç´ ï¼å°è¿ä¸ªå
ç´ ä¸æ°ç»ç¬¬ i 个ä½ç½®ä¸çå
ç´ äº¤æ¢ã
-
-æ¶é´å¤æ度为 $O(n^2)$ ã
-
-## å æåº
-
-对ææè®°å½å»º[å ](/ds/heap/)
-
-æ¯æ¬¡ååºå 顶å
ç´ ï¼å°±å¯ä»¥ä¾æ¬¡å¾å°æ好åºçåºåã
-
-æ¶é´å¤æ度为 $O(n\log n)$ ã
-
-## å½å¹¶æåº
-
-å½å¹¶æåºæ¯ä¸ç§éç¨äº[åæ²»](/basic/divide-and-conquer)ææ³çæåºç®æ³ã
-
-å½å¹¶æåºå为ä¸ä¸ªè¿ç¨ï¼
-
-1. å°æ°åéæåå为两é¨åï¼å¨ååååæ¶æ¶é´å¤æ度为 $O\left(n\log{n}\right)$ ï¼
-2. éå½å°åå«å¯¹ä¸¤ä¸ªååºåè¿è¡å½å¹¶æåº
-3. å并两个ååºå
-
-ä¸é¾åç°ï¼å½å¹¶æåºçæ ¸å¿æ¯å¦ä½å并两个ååºåï¼å两æ¥é½å¾å¥½å®ç°ã
-
-å
¶å®å并çæ¶åä¹ä¸é¾æä½ã注æå°ä¸¤ä¸ªååºåå¨ç¬¬äºæ¥ä¸å·²ç»ä¿è¯äºé½æ¯æåºçäºï¼ç¬¬ä¸æ¥ä¸å®é
ä¸æ¯æ³è¦æ两个 **æåº** çåºåå并起æ¥ã
-
-```cpp
-void merge(int ll, int rr) {
- // ç¨æ¥æ a[ll.. rr - 1] è¿ä¸åºé´çæ°æåºã t æ°ç»æ¯ä¸´æ¶åæ¾æåºççæ¬ç¨çã
- if (rr - ll <= 1) return;
- int mid = ll + (rr - ll >> 1);
- merge(ll, mid);
- merge(mid, rr);
- int p = ll, q = mid, s = ll;
- while (s < rr) {
- if (p >= mid || (q < rr && a[p] > a[q])) {
- t[s++] = a[q++];
- // ans += mid - p;
- } else
- t[s++] = a[p++];
- }
- for (int i = ll; i < rr; ++i) a[i] = t[i];
-}
-```
-
-ç±äº `||` æ¯çè·¯è¿ç®ç¬¦ï¼è¿éé¢ if å¤æçæ
åµæ¯â第ä¸é¨åå·²ç»å®å
¨å并å®äºâæè
â两个é½æ²¡æå并å®ï¼ä¸åä¸ä¸ªçéé¦è¦å¤§äºåä¸ä¸ªâï¼è¿ä¸¤ç§æ
åµé½æ¯è¦æåä¸ä¸ªååºåçéé¦æ¾å°æ°åºåçå½åä½ç½®ä¸ã
-
-### éåºå¯¹
-
-å½å¹¶æåºè¿å¯ä»¥ç¨æ¥æ±éåºå¯¹ç个æ°ã
-
-æè°éåºå¯¹ï¼å°±æ¯æ»¡è¶³ $a_{i} > a_{j}$ ä¸ $i < j$ çæ°å¯¹ $(i, j)$ ã
-
-å¯ä»¥ç¨[æ ç¶æ°ç»](/ds/bit)ã[线段æ ](/ds/segment/)çæ°æ®ç»ææ¥æ±ï¼ä¹å¯ä»¥ç¨å½å¹¶æåºæ¥æ±ã
-
-å
·ä½æ¥è¯´ï¼ä¸é¢å½å¹¶æåºä¸é´æ³¨éæç `ans += mid - p` å°±æ¯å¨ç»è®¡éåºå¯¹ä¸ªæ°ã
-
-æ¯å 为ï¼é£éæé åçæ°æ¾å°åé¢äºï¼è¾å°çæ°æ¾å¨åé¢ï¼ï¼æ以å¨è¿ä¸ªæ°çåæ¥ä½ç½®ä¹åçãæ¯å®å¤§çæ°é½ä¼åå®å½¢æéåºå¯¹ï¼èè¿ä¸ªä¸ªæ°å°±æ¯è¿æ²¡æå并è¿å»çæ°ç个æ°ï¼å³ä¸º `mid - p` ã
-
-使ç¨å½å¹¶æåºæ±éåºå¯¹çæ¶é´å¤æ度ä¹æ¯ $O(n \log n)$ ã
-
-### åè
-
-
-
-## å¿«éæåº
-
-å¿«éæåºæ¯[åæ²»](/basic/divide-and-conquer)å°æ¥å°ä¸ä¸ªæ°ç»æåºã
-
-å¿«éæåºå为ä¸ä¸ªè¿ç¨ï¼
-
-1. å°æ°ååå为两é¨åï¼ä¸æ¯ç´æ¥åï¼è¦æ±ä¿è¯ç¸å¯¹å¤§å°å
³ç³»ï¼
-2. éå½å°ä¸¤ä¸ªååºåä¸åå«è¿è¡å¿«éæåº
-3. ä¸ç¨å并ï¼å 为æ¤æ¶æ°åå·²ç»å®å
¨æåº
-
-åå½å¹¶æåºä¸åï¼ç¬¬ä¸æ¥å¹¶ä¸æ¯ç´æ¥åæåå两个åºåï¼èæ¯å¨åçè¿ç¨ä¸è¦ä¿è¯ç¸å¯¹å¤§å°å
³ç³»ã
-
-第ä¸æ¥ä¸çåºåå·²ç»åå«æåºä¸ç¬¬ä¸ä¸ªåºåä¸çæ°é½å°äºç¬¬äºä¸ªæ°ï¼æ以ç´æ¥æ¼æ¥èµ·æ¥å°±å¥½äºã
-
-å
·ä½æ¥è¯´ï¼ç¬¬ä¸æ¥è¦æ¯è¦ææ°ååæ两个é¨åï¼ç¶åä¿è¯åä¸ä¸ªåæ°åä¸çæ°é½å°äºåä¸ä¸ªåæ°åä¸çæ°ã
-
-æä¹æä½å¢ï¼ä¸ºäºä¿è¯å¹³åæ¶é´å¤æ度ï¼ä¸è¬æ¯éæºéæ©ä¸ä¸ªæ° m æ¥å½å两个åæ°åçåçã
-
-ä¹åï¼ç»´æ¤ä¸åä¸å两个æé p å qï¼ä¾æ¬¡èèå½åçæ°æ¯å¦æ¾å¨äºåºè¯¥æ¾çä½ç½®ï¼åè¿æ¯åï¼ï¼å½åä½ç½®æ¾å¯¹äºä¹åï¼å移å¨æé继ç»å¤çï¼ç´å°ä¸¤ä¸ªæéç¸éã
-
-å¦æå½åçæ°æ²¡æ¾å¯¹å¢ï¼æ¯å¦è¯´å¦æåé¢çæé q éå°äºä¸ä¸ªæ¯ m å°çæ°ï¼é£ä¹å¯ä»¥äº¤æ¢ p å q ä½ç½®ä¸çæ°ï¼åæ p åå移ä¸ä½ã
-
-å
¶å®ï¼å¿«éæåºæ²¡ææå®åºå¦ä½å
·ä½å®ç°ç¬¬ä¸æ¥ï¼ä¸è®ºæ¯éæ© m çè¿ç¨è¿æ¯ååçè¿ç¨ï¼é½ä¸æ¯åªæä¸ç§å®ç°æ¹æ³ã
-
-注æï¼ä¸è¬æ们说çå¿«éæåºçæ¶é´å¤æ度æ¯å¹³å为 $O(n\log n)$ ï¼æåæ¯ $O(n^2)$ ï¼åªä¸è¿å®è·µä¸å ä¹ä¸å¯è½è¾¾å°æåæ
åµã
-
-å
¶å®ï¼å¨éæ© m çè¿ç¨ä¸ä½¿ç¨ [Median of Medians](https://en.wikipedia.org/wiki/Median_of_medians) ç®æ³ï¼å°±å¯ä»¥ä¿è¯æåæ¶é´å¤æ度为 $O(n\log n)$ ï¼ä½æ¯ç±äºå
¶è¿äºå¤æï¼å®è·µä¸ä¸è¬ä¸ä½¿ç¨ã
-
-### STL
-
-C å½æ°æ¨¡æ¿åºå®ç°äºå¿«éæåºï¼å³ `stdlib.h` å½ä¸ç `qsort` ã
-
-ä½å¨ OI ç¸å
³æ¯èµå½ä¸ï¼æ´ä¸ºå¸¸è§çåºæåºå½æ°æ¯ C++ `algorithm` åºä¸ç `std::sort` å½æ°ã
-
-C++ æ å并æªä¸¥æ ¼è¦æ±æ¤å½æ°çå®ç°ç®æ³ï¼å
·ä½å®ç°åå³äºç¼è¯å¨ã
-
-æ§ç C++ æ åä¸ä»
è¦æ±å®ç **å¹³å** æ¶é´å¤æåº¦è¾¾å° $O(n\log n)$ï¼ä½ C++11 æ åè¦æ±å®ç **æå** æ¶é´å¤æ度æ¯è¾¾å° $O(n\log n)$ ãå¯ä»¥æ¥é
[std::sort()](https://en.cppreference.com/w/cpp/algorithm/sort)
-
-å¨ [libstdc++](https://github.com/mirrors/gcc/blob/master/libstdc++-v3/include/bits/stl_algo.h) å [libc++](http://llvm.org/svn/llvm-project/libcxx/trunk/include/algorithm) ä¸ä½¿ç¨çé½æ¯ [Introsort](https://en.wikipedia.org/wiki/Introsort)ã
-
-Introsort éå¶äºå¿«éæåºçå治深度ï¼å½å治达å°ä¸å®æ·±åº¦ä¹åï¼æ¹ç¨æåæ¶é´å¤æ度为 $O(n\log n)$ çæåºç®æ³ï¼æ¯å¦å æåºï¼æ¥ç»åæ°ç»æåºã
-
-Introsort çè¿ä¸ªéå¶ä½¿å¾å®çæåæ¶é´å¤æåº¦æ¯ $O(n\log n)$ çã
-
-å¿«éç¨æ³ï¼
-
-```cpp
-// a[0] .. a[n - 1] 为éè¦æåºçæ°å
-std::sort(a, a + n);
-// è¿å¥ä»£ç ç´æ¥ä¿®æ¹ a æ°ç»éçå
ç´ é¡ºåºï¼ä½¿å¾ç°å¨å®æ¯ä»å°å°å¤§æåç
-```
-
-### 线æ§æ¾ç¬¬ k 大çæ°
-
-æ¾ç¬¬ k 大çæ°ï¼K-th order statisticï¼ï¼æç®åçæ¹æ³æ¯å
æåºï¼ç¶åç´æ¥æ¾å°ç¬¬ k 大çä½ç½®çå
ç´ ãè¿æ ·åçæ¶é´å¤æåº¦æ¯ $O(n\log n)$ ï¼å¯¹äºè¿ä¸ªé®é¢æ¥è¯´å¾ä¸åç®ãäºå®ä¸ï¼æ们ææ¶é´å¤æ度 $O(n)$ ç解æ³ã
-
-èèå¿«éæåºçååè¿ç¨ï¼å¨å¿«éæåºçâååâç»æåï¼æ°å $A_{p} \cdots A_{r}$ 被åæäº $A_{p} \cdots A_{q}$ å $A_{q+1} \cdots A_{r}$ ï¼æ¤æ¶å¯ä»¥æç
§å·¦è¾¹å
ç´ ç个æ°ï¼ $q - p + 1$ ï¼å k ç大å°å
³ç³»æ¥å¤ææ¯åªå¨å·¦è¾¹è¿æ¯åªå¨å³è¾¹éå½å°æ±è§£ã
-
-å¯ä»¥è¯æï¼å¨æææä¹ä¸ï¼ç¨åºçæ¶é´å¤æ度为 $O(n)$ ã
-
-### åè
-
-
-
-
-
-## 计æ°æåº
-
-计æ°æåºä¹ç§°æ¡¶æåºï¼å¯ä»¥å¨ $O(n)$ çæ¶é´å¤æ度å
对æ°ç»è¿è¡æåºï¼ä½æ¯å®ç空é´å¤æ度ä¸éè¦æåºçæ°ç»çå¼åç¸å
³ã
-
-!!! warning "注"
- 注æåºå **åºæ°æåº** ä¸ **桶æåº**
-
-ç®æ³æµç¨å°±æ¯è®°å½æ¯ä¸ä¸ªæ°åºç°äºå¤å°æ¬¡ï¼ç¶åä»å°å°å¤§ä¾æ¬¡è¾åºã
-
-ä¸è¬èèçæ¯æä¸èå´å
çæ´æ°ï¼ä½æ¯è®¡æ°æåºä¹å¯ä»¥å[离æ£å](/misc/discrete)ä¸èµ·ä½¿ç¨ï¼æ¥å¯¹æµ®ç¹æ°ã大æ´æ°è¿è¡æåºã
-
-## åºæ°æåº
-
-åºæ¸æåºæ¯å°å¾
æåºç æåæå¤ä¸ªé¨ååå«æ¥æ¯è¾ã
-
-æç
§æåºç çå
å顺åºï¼å为两ç§ï¼
-
-1. é«ä½ä¼å
ï¼MSDï¼
- å
对é«ä½æåºï¼åæè¥å¹²ååºåï¼å¯¹æ¯ä¸ªååºåæ ¹æ®è¾ä½ä½æåºï¼æ¯ä¸ä¸ªåãåãâ¦â¦ãåãæ¶çè¿ç¨ã
-2. ä½ä½ä¼å
ï¼LSDï¼
- ä»ä½ä½å¼å§ï¼å¯¹äºæ好çåºåç¨æ¬¡ä½ä½æåºï¼ï¼æ¯æ¬¡æåºçé½æ¯å
¨ä½å
ç´ ï¼æ¯ä¸ä¸ªåãæ¶ãåãæ¶ãâ¦â¦ãåãæ¶çè¿ç¨ã
-
-ä½ä½ä¼å
é度è¾å¿«ï¼ä¾¿äºå¤çï¼æ´å¸¸ç¨ã
-
-åºæ°æåºå¯¹å
³é®ç å¼è¿è¡ $O(\log_r n)$ 次è¿ç®ï¼å æ¤å¤ç n 个ä¸åçå
³é®ç æ¶ï¼åºæ°æåºçæ¶é´ä»£ä»·ä¸º $O(n \log n)$ ã
-
-### åè
-
-ATool çæåºæ¼ç¤ºå¨ç»
-
-
-## æåºçåºç¨
-
-åå©æåºï¼æ们å¯ä»¥éä½æ±è§£é®é¢æéè¦çæ¶é´å¤æ度ã
-
-èèä¸ä¸ªæ°åï¼ä½ éè¦æ£æ¥å
¶ä¸æ¯å¦æå
ç´ ç¸çã
-
-ä¸ä¸ªæ´ç´ çåæ³æ¯æ£æ¥æ¯ä¸ä¸ªæ°å¯¹ï¼å¹¶å¤æè¿ä¸å¯¹æ°æ¯å¦ç¸çãæ¶é´å¤æåº¦æ¯ $O(n^2)$ ã
-
-æ们ä¸å¦¨å
对è¿ä¸åæ°æåºï¼ä¹åä¸é¾åç°ï¼å¦ææç¸çç两个æ°ï¼å®ä»¬ä¸å®å¨æ°æ°åä¸å¤äºç¸é»çä½ç½®ä¸ãè¿æ¶ï¼åªéè¦ $O(n)$ å°æ«ä¸éæ°æ°åäºãæ»çæ¶é´å¤æ度æ¯æåºçå¤æåº¦ï¼ $O(n\log n)$ ï¼ã
-
-æåºä¹æ¯[äºåæ¥æ¾](/basic/binary/)æè¦åçé¢å¤çå·¥ä½ãå¨æåºå使ç¨[äºåæ¥æ¾](/basic/binary/)ï¼æ们å¯ä»¥å¨ $O(\log n)$ çæ¶é´å
å¨åºåä¸æ¥æ¾æå®çå
ç´ ã
diff --git a/docs/basic/stl-sort.md b/docs/basic/stl-sort.md
new file mode 100644
index 00000000..c18517ec
--- /dev/null
+++ b/docs/basic/stl-sort.md
@@ -0,0 +1,112 @@
+## sort
+
+C å½æ°æ¨¡æ¿åºå®ç°äºå¿«éæåºï¼å³ `stdlib.h` å½ä¸ç `qsort` ã
+
+ä½å¨ OI ç¸å
³æ¯èµå½ä¸ï¼æ´ä¸ºå¸¸è§çåºæåºå½æ°æ¯ C++ `algorithm` åºä¸ç `std::sort` å½æ°ã
+
+C++ æ å并æªä¸¥æ ¼è¦æ±æ¤å½æ°çå®ç°ç®æ³ï¼å
·ä½å®ç°åå³äºç¼è¯å¨ã
+
+æ§ç C++ æ åä¸ä»
è¦æ±å®ç **å¹³å** æ¶é´å¤æåº¦è¾¾å° $O(n\log n)$ï¼ä½ C++11 æ åè¦æ±å®ç **æå** æ¶é´å¤æ度æ¯è¾¾å° $O(n\log n)$ ãå¯ä»¥æ¥é
[std::sort()](https://en.cppreference.com/w/cpp/algorithm/sort)
+
+å¨ [libstdc++](https://github.com/mirrors/gcc/blob/master/libstdc++-v3/include/bits/stl_algo.h) å [libc++](http://llvm.org/svn/llvm-project/libcxx/trunk/include/algorithm) ä¸ä½¿ç¨çé½æ¯ [Introsort](https://en.wikipedia.org/wiki/Introsort)ã
+
+Introsort éå¶äºå¿«éæåºçå治深度ï¼å½å治达å°ä¸å®æ·±åº¦ä¹åï¼æ¹ç¨æåæ¶é´å¤æ度为 $O(n\log n)$ çæåºç®æ³ï¼æ¯å¦å æåºï¼æ¥ç»åæ°ç»æåºã
+
+Introsort çè¿ä¸ªéå¶ä½¿å¾å®çæåæ¶é´å¤æåº¦æ¯ $O(n\log n)$ çã
+
+å¿«éç¨æ³ï¼
+
+```cpp
+// a[0] .. a[n - 1] 为éè¦æåºçæ°å
+std::sort(a, a + n);
+// è¿å¥ä»£ç ç´æ¥ä¿®æ¹ a æ°ç»éçå
ç´ é¡ºåºï¼ä½¿å¾ç°å¨å®æ¯ä»å°å°å¤§æåç
+```
+
+## nth_element
+
+ä½ç¨æ¯æ¾å°éå®åºé´å
第 $kâ$ 大çæ°ï¼å¹¶å°æææ¯å®å°çæ°ä¸æ¯å®å¤§çæ°åå«ç½®äºä¸¤ä¾§ï¼è¿åå®çå°åã
+
+åçæ¯æªå®æçå¿«éæåº
+
+ç¨æ³
+
+```cpp
+std::nth_element(begin,mid,end);
+```
+
+æ¶é´å¤æ度ï¼ææ $O(n)$
+
+常ç¨äºæ建 K-DTree
+
+## stable_sort
+
+稳å®ç $O(nlogn)$ æåºï¼å³ä¿è¯ç¸çå
ç´ æåºåçç¸å¯¹ä½ç½®ä¸ååºåç¸åã
+
+ç¨æ³
+
+```cpp
+std::stable_sort(begin,end,cmp);
+```
+
+## partial_sort
+
+å°åºåä¸å $k$ å°å
ç´ æ顺åºç½®äºå $k$ 个ä½ç½®ï¼åé¢çå
ç´ ä¸ä¿è¯é¡ºåºã
+
+å¤æ度ï¼$O(nlogk)$
+
+ç¨æ³ï¼
+
+```cpp
+std::partial_sort(begin,begin+k,end);
+```
+
+åçï¼
+
+å®ç° partial_sort çææ³æ¯ï¼å¯¹åå§å®¹å¨å
åºé´ä¸º $[first, middle)$ çå
ç´ æ§è¡make_heap() æä½æé ä¸ä¸ªå¤§æ ¹å ï¼ç¶åæ¿ $[middle, last)$ ä¸çæ¯ä¸ªå
ç´ å $first$ è¿è¡æ¯è¾ï¼$first$ å
çå
ç´ ä¸ºå å
çæ大å¼ãå¦æå°äºè¯¥æ大å¼ï¼åäºæ¢å
ç´ ä½ç½®ï¼å¹¶å¯¹ $[first, middle)$ å
çå
ç´ è¿è¡è°æ´ï¼ä½¿å
¶ä¿ææ大å åºãæ¯è¾å®ä¹åå¨å¯¹ $[first, middle)$ å
çå
ç´ åä¸æ¬¡å¯¹æåº sort_heap() æä½ï¼ä½¿å
¶æå¢åºæåã注æï¼å åºåå¢åºæ¯ä¸åçã
+
+## å®ä¹è¿ç®ç¬¦
+
+对äºå
置类åï¼å¦ `int` ï¼åç¨æ·å®ä¹çç»æä½ï¼ä½ é½å¯ä»¥å®ä¹è°ç¨ STL æåºå½æ°æ¶ä½¿ç¨ç**å°äºè¿ç®ç¬¦**ãä½ å¯ä»¥å¨è°ç¨å½æ°æ¶åæ¶ä¼ å
¥ä¸ä¸ªæ¯è¾è¿ç®ç¬¦çå½æ°ï¼ä¸è¬æ¯æåä¸é¡¹ï¼ï¼ä¹å¯ä»¥ç´æ¥é载该类åçé»è®¤è¿ç®ç¬¦ãåè§ [cppreference](https://zh.cppreference.com/w/cpp/language/operators) ã
+ä¸é¢æ¯å 个ä¾åï¼
+
+```cpp
+int a[1009], n = 10;
+// ......
+std::sort(a + 1, a + 1 + n); // ä¸éè½½ï¼ä»å°å°å¤§æåºã
+std::sort(a + 1, a + 1 + n, greater()); // éè½½å°äºè¿ç®ç¬¦ä¸ºå¤§äºï¼ä»å¤§å°å°æåºã
+```
+
+```cpp
+struct data {
+ int a, b;
+ bool operator < (const data rhs) const {
+ return (a == rhs.a) ? (b < rhs.b) : (a < rhs.a);
+ }
+} da[1009];
+bool cmp (const data u1, const data u2) {
+ return (u1.a == u2.a) ? (u1.b > u2.b) : (u1.a > u2.a);
+}
+// ......
+std::sort(da + 1, da + 1 + 10, cmp); // ä¸éè½½ï¼ä»å°å°å¤§æåºã
+std::sort(da + 1, da + 1 + 10, cmp); // éè½½å°äºè¿ç®ç¬¦ä¸ºå¤§äºï¼ä»å¤§å°å°æåºã
+```
+
+### ä¸¥æ ¼å¼±åº
+
+è¿è¡æåºçè¿ç®ç¬¦å¿
é¡»æ»¡è¶³ä¸¥æ ¼å¼±åºï¼ [Strict weak orderings](https://en.wikipedia.org/wiki/Weak_ordering#Strict_weak_orderings) ï¼ï¼å¦åä¼åºç°ä¸å¯é¢æçæ
åµï¼å¦è¿è¡æ¶é误ï¼ã
+ä¸¥æ ¼å¼±åºçè¦æ±ï¼
+
+1. $x \not< x$ ï¼éèªåæ§ï¼
+2. è¥ $x < y$ ï¼å $y \not< x$ ï¼é对称æ§ï¼
+3. è¥ $x < y, y < z$ ï¼å $x < z$ ï¼ä¼ éæ§ï¼
+4. è¥ $x \not< y, y \not< x, y \not< z, z \not< y$ï¼å $x \not< z, z \not< x$ ï¼ä¸å¯æ¯æ§çä¼ éæ§ï¼
+
+常è§çé误åæ³ï¼
+
+* ä½¿ç¨ `<=` æ¥å®ä¹æåºä¸çå°äºè¿ç®ç¬¦ã
+* å¨è°ç¨æåºè¿ç®ç¬¦æ¶ï¼è¯»åå¤é¨æ°å¼å¯è½ä¼æ¹åçæ°ç»ãï¼å¸¸è§äºæçè·¯ç®æ³ï¼
+* å°å¤ä¸ªæ°çæ大æå°å¼è¿è¡æ¯è¾çç»æä½ä¸ºæåºè¿ç®ç¬¦ã
+
+### Reference
+
+* [æµ
è°é»é¡¹äº¤æ¢æåºçåºç¨ä»¥åéè¦æ³¨æçé®é¢](https://ouuan.github.io/æµ
è°é»é¡¹äº¤æ¢æåºçåºç¨ä»¥åéè¦æ³¨æçé®é¢/)
diff --git a/docs/basic/use-of-sort.md b/docs/basic/use-of-sort.md
new file mode 100644
index 00000000..1f121f59
--- /dev/null
+++ b/docs/basic/use-of-sort.md
@@ -0,0 +1,9 @@
+åå©æåºï¼æ们å¯ä»¥éä½æ±è§£é®é¢æéè¦çæ¶é´å¤æ度ã
+
+èèä¸ä¸ªæ°åï¼ä½ éè¦æ£æ¥å
¶ä¸æ¯å¦æå
ç´ ç¸çã
+
+ä¸ä¸ªæ´ç´ çåæ³æ¯æ£æ¥æ¯ä¸ä¸ªæ°å¯¹ï¼å¹¶å¤æè¿ä¸å¯¹æ°æ¯å¦ç¸çãæ¶é´å¤æåº¦æ¯ $O(n^2)$ ã
+
+æ们ä¸å¦¨å
对è¿ä¸åæ°æåºï¼ä¹åä¸é¾åç°ï¼å¦ææç¸çç两个æ°ï¼å®ä»¬ä¸å®å¨æ°æ°åä¸å¤äºç¸é»çä½ç½®ä¸ãè¿æ¶ï¼åªéè¦ $O(n)$ å°æ«ä¸éæ°æ°åäºãæ»çæ¶é´å¤æ度æ¯æåºçå¤æåº¦ï¼ $O(n\log n)$ ï¼ã
+
+æåºä¹æ¯[äºåæ¥æ¾](/basic/binary/)æè¦åçé¢å¤çå·¥ä½ãå¨æåºå使ç¨[äºåæ¥æ¾](/basic/binary/)ï¼æ们å¯ä»¥å¨ $O(\log n)$ çæ¶é´å
å¨åºåä¸æ¥æ¾æå®çå
ç´ ã
\ No newline at end of file
diff --git a/docs/graph/basic.md b/docs/graph/basic.md
index 022dc292..6122f1c9 100644
--- a/docs/graph/basic.md
+++ b/docs/graph/basic.md
@@ -36,7 +36,7 @@
å
¶ä¸ `head[i]` ç¨æ¥å以 $i$ 为起ç¹çè¾¹ï¼ `edge` æ°ç»æ¯è¾¹è¡¨ã
-é£ä¹ä»ä¹æ¯ååæå¢ï¼äºå
æ `edge` æ°ç»æ个åºå³å¯ãè¿éå¯ä»¥ä½¿ç¨[åºæ°æåº](/basic/sort)åå° $O(m)$ ã
+é£ä¹ä»ä¹æ¯ååæå¢ï¼äºå
æ `edge` æ°ç»æ个åºå³å¯ãè¿éå¯ä»¥ä½¿ç¨[åºæ°æåº](/basic/radix-sort)åå° $O(m)$ ã
## å¾çåºæ¬æ¦å¿µ
diff --git a/mkdocs.yml b/mkdocs.yml
index 2cf1ab2d..3132b853 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -43,7 +43,19 @@ nav:
- 模æ: basic/simulate.md
- éå½ & åæ²»: basic/divide-and-conquer.md
- è´ªå¿: basic/greedy.md
- - æåº: basic/sort.md
+ - æåº:
+ - æåºç®ä»: basic/sort-intro.md
+ - éæ©æåº: basic/selection-sort.md
+ - å泡æåº: basic/bubble-sort.md
+ - æå
¥æåº: basic/insertion-sort.md
+ - 计æ°æåº: basic/bucket-sort.md
+ - å¿«éæåº: basic/quick-sort.md
+ - å½å¹¶æåº: basic/merge-sort.md
+ - å æåº: basic/heap-sort.md
+ - åºæ°æåº: basic/radix-sort.md
+ - å¸å°æåº: basic/shell-sort.md
+ - æåºç¸å
³ STL: basic/stl-sort.md
+ - æåºåºç¨: basic/use-of-sort.md
- 表达å¼æ±å¼: basic/expression.md
- äºå: basic/binary.md
- æé : basic/construction.md
--
2.11.0