Algorithm 计数排序不同的方法

Algorithm 计数排序不同的方法,algorithm,sorting,Algorithm,Sorting,在计数排序算法中,我们使用给定数组中的最大值大小初始化计数数组。此方法的运行时间为O(n+最大值)。然而,通过一个额外的循环,我们可以寻找给定数组的最小值和最大值 for 0 -> Length(given_array) if given_array[i] > max max = given_array[i] if given_array[i] < min min = given_array[i] 用于0->Length(给定数组) 如果

在计数排序算法中,我们使用给定数组中的最大值大小初始化计数数组。此方法的运行时间为O(n+最大值)。然而,通过一个额外的循环,我们可以寻找给定数组的最小值和最大值

for 0 -> Length(given_array)
   if given_array[i] > max 
      max = given_array[i]
   if given_array[i] < min
      min = given_array[i]
用于0->Length(给定数组)
如果给定_数组[i]>max
max=给定的_数组[i]
如果给定_数组[i]

然后使用该数据创建计数数组,比如95-100。在某些情况下,我们可以极大地减少运行时间。然而,我还没有见过这样的方法。它仍然是一个计数排序算法,还是有另一个我不知道的名称。

计数排序通常是在我们预先知道值将被限制在某个范围时使用的

这个范围不需要从零开始;使用长度为6的数组,其元素表示值95到100的计数(或者,就此而言,表示−2至3)。所以,是的,你的方法仍然是“计数排序”

但是,如果您事先不知道这个限制,则不太可能通过对数据进行完整的传递来获得更快的结果

例如:假设您有1000000个元素,并且您知道它们都在0到200的范围内,但是您认为它们可能都在一个更窄的范围内。嗯,对整个输入数组进行预扫描的成本将大于使用201元素工作数组的成本,这意味着与仅使用范围为0–200的计数排序相比,它的成本超出了可能节省的成本

此方法的运行时间为O(n+最大值)


运行时是O(max(num_元素,range_大小)),由于Landau(big-O)符号的魔力,它与O(num_元素+range_大小)相同。如果max_值渐近地大于num_元素和range_size,则您的方法只会影响渐近复杂性。

当我们预先知道值将限制在某个范围时,通常使用计数排序

这个范围不需要从零开始;使用长度为6的数组,其元素表示值95到100的计数(或者,就此而言,表示−2至3)。所以,是的,你的方法仍然是“计数排序”

但是,如果您事先不知道这个限制,则不太可能通过对数据进行完整的传递来获得更快的结果

例如:假设您有1000000个元素,并且您知道它们都在0到200的范围内,但是您认为它们可能都在一个更窄的范围内。嗯,对整个输入数组进行预扫描的成本将大于使用201元素工作数组的成本,这意味着与仅使用范围为0–200的计数排序相比,它的成本超出了可能节省的成本

此方法的运行时间为O(n+最大值)


运行时是O(max(num_元素,range_大小)),由于Landau(big-O)符号的魔力,它与O(num_元素+range_大小)相同。如果max_值渐进地大于num_元素和range_大小,则您的方法只会影响渐进复杂性。

“我们将极大地减少运行时间。”
–这取决于范围与最大值的比率。寻找最小值通常被忽略,因为它需要额外的工作,这可能证明是不值得的。但是是的,它仍然是计数排序,因为计数事件的基本思想是相同的——只是输入数组被有效地移位。是的,但是计数排序的一个缺点是最大值的范围。我们可以用这种方式来补偿它,实际上是计数排序,只是通常不是这样实现的。From:“它的运行时间在项目数量以及最大和最小键值之间的差异方面是线性的”如果我没有弄错,它的复杂性仍然是O(n+k),如果我错了,请纠正我。@aomerk如果k是max-min,是的
“我们将极大地减少运行时间。”
–这取决于范围与最大值的比率。寻找最小值通常被忽略,因为它需要额外的工作,这可能证明是不值得的。但是是的,它仍然是计数排序,因为计数事件的基本思想是相同的——只是输入数组被有效地移位。是的,但是计数排序的一个缺点是最大值的范围。我们可以用这种方式来补偿它,实际上是计数排序,只是通常不是这样实现的。From:“它的运行时间在项目数量以及最大和最小键值之间的差异方面是线性的”如果我没有弄错,它的复杂性仍然是O(n+k),如果我错了,请纠正我。@aomerk如果k是max-min,是的