【发布时间】:2018-11-29 01:37:16
【问题描述】:
在计数排序算法中,我们在给定数组中初始化一个大小为最大值的计数数组。此方法的运行时间为 O(n + Max value)。但是通过一个额外的循环,我们可以查找给定数组的最小值和最大值;
for 0 -> Length(given_array)
if given_array[i] > max
max = given_array[i]
if given_array[i] < min
min = given_array[i]
然后使用该数据创建计数数组,假设在 95-100 之间。在某些情况下,我们可以极大地减少运行时间。但是,我还没有看到这样的方法。会不会还是计数排序算法,还是有别的名字我不知道。
【问题讨论】:
-
"We would decrease the run time tremendously."- 这取决于范围与最大值的比率。找到最小值通常会被省略,因为它需要额外的工作,而这可能不值得。但是是的,它仍然是计数排序,因为计数出现的基本思想是相同的——只是输入数组被有效地移动了。 -
是的,但是计数排序的缺点之一是最大值的范围。我们可以用这种方式补偿它
-
这实际上是计数排序,只是通常不以这种方式实现。来自wikipedia:“它的运行时间与项目数和最大最小键值之差呈线性关系”
-
如果我没记错的话,它的复杂度仍然是O(n+k),如果我错了,请纠正我。
-
@aomerk 如果 k 是最大 - 最小,是的