如何比在C ++中使用qsort更快地对一百万个数字进行分组?

时间:2019-05-01 21:06:50

标签: c++ grouping

我如何才能将一系列整数(例如[4、2、3、3、2、4、1、2、4])分组为[4、4、4、2、2、2, [3,3,1],而无需使用任何排序算法。

请注意,我不需要将结果按任何排序的顺序进行,但是我确实需要建议的算法来比qsort更快地对一百万个数字进行分组。

1 个答案:

答案 0 :(得分:2)

如果您不太在意使用多余的空间,这应该可以工作。它首先将每个数字的出现次数存储在unordered_map中,然后创建一个包含映射中每个值的向量,并重复在原始vector中看到的次数。有关其工作原理,请参见insert的文档。 []的{​​{1}}运算符平均在unordered_map中工作。因此,创建O(1)需要花费unordered_map的时间。遍历地图并再次填充返回向量需要O(N)时间,因此,整个过程应在O(N)中运行。请注意,这会创建两个额外的数据副本。

在最坏的情况下,O(N)运算符会花费[]的时间,因此要真正知道它是否比O(N)更快,唯一的方法就是测量它。

qsort