-桶æ\8e\92åº\8fé\80\82ç\94¨äº\8eå¾\85æ\8e\92åº\8fæ\95°æ\8d®å\80¼å\9f\9fè¾\83大ä½\86å\88\86å¸\83æ¯\94è¾\83å\9d\87å\8c\80ç\9a\84æ\83\85å\86µï¼\8cæ\98¯ä¸\80个æ\9c\9fæ\9c\9bæ\97¶é\97´å¤\8dæ\9d\82度为 $O(n)$ ç\9a\84æ\8e\92åº\8fç®\97æ³\95。
+æ\9c¬é¡µé\9d¢å°\86ç®\80è¦\81ä»\8bç»\8d桶æ\8e\92åº\8f。
-其大致思想是对值域进行分块,每块分别排序。由于每块元素不多,一般使用插入排序。如果使用稳定的内层排序,并且将元素插入桶中时不改变相对顺序,那么桶排序就是稳定的。
+## 简介
-如果待排序数据是随机生成的,将值域平均分成 $n$ 块的期望时间复杂度是 $O(n)$ ,证明可以参考算法导论或 [维基百科](https://en.wikipedia.org/wiki/Bucket_sort) 。
+桶排序(英文:Bucket sort)是排序算法的一种,适用于待排序数据值域较大但分布比较均匀的情况。
-C++ 代码:
+## 工作原理
+
+桶排序以下列程序进行:
+
+1. 设置一个定量的数组当作空桶;
+2. 寻访序列,并且把元素一个一个放到对应的桶中;
+3. 对每个不是空的桶进行排序;
+4. 从不是空的桶里把元素再放回原来的序列中。
+
+## 性质
+
+### 稳定性
+
+如果使用稳定的内层排序,并且将元素插入桶中时不改变相对顺序,那么桶排序就是一种稳定的排序算法。
+
+由于每块元素不多,一般使用插入排序。此时桶排序是一种稳定的排序算法。
+
+### 时间复杂度
+
+桶排序的平均时间复杂度为 $O(n + n^2/k + k)$(将值域平均分成 $n$ 块 + 排序 + 重新合并元素),当 $k\approx n$ 时为 $O(n)$。[^ref1]
+
+桶排序的最坏时间复杂度为 $O(n^2)$。
+
+## 算法实现
+
+### C++
```cpp
const int N = 100010;
}
}
```
+
+## 参考资料与注释
+[^ref1]: [(英文)Bucket sort - Wikipedia](https://en.wikipedia.org/wiki/Bucket_sort#Average-case_analysis)
\ No newline at end of file