OSDN Git Service

feat: add 计数排序
authorIr1d <sirius.caffrey@gmail.com>
Thu, 23 Aug 2018 08:49:07 +0000 (16:49 +0800)
committerIr1d <sirius.caffrey@gmail.com>
Thu, 23 Aug 2018 08:49:07 +0000 (16:49 +0800)
docs/basic/sort.md

index 36956b7..5fc3b2f 100644 (file)
@@ -10,7 +10,7 @@
 
 时间复杂度用来衡量一个算法的运行时间和输入规模的关系,类似的有空间复杂度,用来描述算法的空间消耗的规模。
 
-简单计算复杂度的方法一般是统计“简单操作”的执行次数,有时候也可以直接数循环的层数来近似估计。
+简单计算复杂度的方法一般是统计 “简单操作” 的执行次数,有时候也可以直接数循环的层数来近似估计。
 
 时间复杂度分为最坏时间复杂度、平均时间复杂度、最好时间复杂度等等。OI 竞赛中要考虑的一般是最坏时间复杂度,因为它代表的是算法运行水平的下界,在评测中不会出现更差的结果了。
 
@@ -22,7 +22,7 @@
 
 ## 快速排序
 
-C函数模板库实现了快速排序,即`stdlib.h`当中的`qsort`。但在OI相关比赛当中,更为常见的库排序函数是C++ `algorithm`库中的`std::sort`函数。C++标准并未严格要求此函数的实现算法,具体实现取决于编译器,但他的时间复杂度是$O(N\log N)$的。可以查阅 [std::sort()](http://www.cplusplus.com/reference/list/list/sort/)
+C 函数模板库实现了快速排序,即 `stdlib.h` 当中的 `qsort`。但在 OI 相关比赛当中,更为常见的库排序函数是 C++ `algorithm` 库中的 `std::sort` 函数。C++ 标准并未严格要求此函数的实现算法,具体实现取决于编译器,但他的时间复杂度是 $O(N\log N)$ 的。可以查阅 [std::sort()](http://www.cplusplus.com/reference/list/list/sort/)
 
 快速用法:
 ```c++
@@ -30,3 +30,18 @@ C函数模板库实现了快速排序,即`stdlib.h`当中的`qsort`。但在OI
 std::sort(a, a + n);
 // 这句代码直接修改 a 数组里的元素顺序,使得现在它是从小到大排列的
 ```
+
+## 计数排序
+
+计数排序可以在 $O(n)$ 的时间内排序,但是它要求所有的数都出现在一定的范围内。
+
+!!! warning "注"
+    注意区分 ** 基数排序 **
+
+算法流程顾名思义,就是记录每一个数出现了多少次,然后从小到大依次输出。
+
+一般考虑的是某一范围内的整数,但是计数排序也可以和 [离散化](/misc/discrete) 一起使用,来对浮点数、大整数进行计数排序。
+
+## 参考
+
+https://www.geeksforgeeks.org/counting-sort/
\ No newline at end of file