计数排序
// 元素个数 100000, 元素的取值范围为 1 ~ 100000
constexpr int N = 1e+5 + 10;
int arr[N], cnts[N], res[N];
void countSort(int n)
{
for(int i = 1; i <= n; ++i) cnts[arr[i]]++;
for(int i = 1; i < N ; ++i) cnts[i] += cnts[i - 1];
for(int i = n; i; --i) res[cnts[arr[i]]--] = arr[i];
}
// 元素个数 100000, 元素取值范围 1 ~ 10^9, 此时无法开辟这么大的静态数组
// 这里可以用 C++ 的 map 容器, 来存储并求前缀和
void countSort(int n)
{
map<int, int> cnts;
for(int i = 1; i <= n; ++i) cnts[arr[i]]++;
int t = 0;
for(auto [k, v] : cnts)
{
cnts[k] += t;
t += v;
}
for(int i = n; i; --i) res[cnts[arr[i]]--] = arr[i];
}