计数排序假设 n 个输入元素中的每一个都是在 [0, k] 区间内的一个整数,其中 k 为某个整数,当 k = O(n)时,排序的运行时间为Θ(n)。代码如下:
void countingSort(vector<int> &arr, int k)
{
vector<int> c(k + 1, 0);
vector<int> tmpArr(arr);
for (auto x : tmpArr)
++c[x];
for (int i = 1; i < c.size(); ++i)
c[i] += c[i - 1];
for (int j = tmpArr.size() - 1; j >= 0; --j)
{
arr[c[tmpArr[j]] - 1] = tmpArr[j];
--c[tmpArr[j]];
}
}