Sorting std中是否存在计数排序:STL中是否存在排序?

Sorting std中是否存在计数排序:STL中是否存在排序?,sorting,stl,counting-sort,Sorting,Stl,Counting Sort,计数排序具有时间复杂度:O(n+k)n->输入大小k->abs。b/w最小值和最大值的差异。在某些情况下,计数排序优于基于比较的排序算法 它是否存在于STL中的std:sort中?如果没有,原因是什么? STL中是否有计数排序功能 std中是否存在计数排序:STL中是否存在排序 不,它不存在。该函数基于快速排序和其他启发式方法 如果没有,原因是什么 可能是因为它很容易实现。检查 STL中是否有计数排序功能 C++STL提供了基本的拟合数据结构-数组和向量,可用于实现计数排序 map也可用于实现计

计数排序具有时间复杂度:O(n+k)n->输入大小k->abs。b/w最小值和最大值的差异。在某些情况下,计数排序优于基于比较的排序算法 它是否存在于STL中的std:sort中?如果没有,原因是什么? STL中是否有计数排序功能

std中是否存在计数排序:STL中是否存在排序

不,它不存在。该函数基于快速排序和其他启发式方法

如果没有,原因是什么

可能是因为它很容易实现。检查

STL中是否有计数排序功能

C++STL提供了基本的拟合数据结构-数组和向量,可用于实现计数排序


map
也可用于实现计数排序,但它将不再是O(n),因为map操作是O(logn)复杂度。

原则上,没有什么可以阻止
std::sort
实现检测有利于计数排序的(相当狭窄和专门化)条件,并用它代替通用排序算法。我不知道有哪种实现真正做到了这一点;如果我不得不猜测原因的话,我会怀疑这不值得费心——在实践中,使用计数排序的情况很少。如果您知道您的算法将从中受益,请随意实现它或查找现有的第三方实现。我可以确认,它不存在于Visual Studio的std::sort()实现中,后者是的变体。
count = array of k+1 zeros
for x in input do
    count[key(x)] += 1

total = 0
for i in 0, 1, ... k do
    count[i], total = total, count[i] + total

output = array of the same length as input
for x in input do
    output[count[key(x)]] = x
    count[key(x)] += 1 

return output