计数排序不同的方法

时间:2018-11-28 15:38:20

标签: 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]

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

1 个答案:

答案 0 :(得分:2)

当我们知道 upfront 将值限制在一定范围内时,通常使用计数排序。

此范围无需从零开始;最好使用长度为6的数组,该数组的元素表示从95到100的值的计数(或者就此而言,从-2到3的值的计数)。因此,是的,您的方法仍然是“计数排序”。

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

例如:假设您有1,000,000个元素,并且您知道它们都在0-200范围内,但是您认为它们全部可能是 范围要窄得多。好吧,预扫描整个输入阵列的成本将大于使用201元素的工作阵列的成本,这意味着与仅进行范围为0的计数排序相比,它的成本超出了其可能节省的成本。 200。

  

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

运行时间为 O (max(num_elements,Â_range_size)),由于Landau(big-O)表示法的神奇之处,它与 O 相同(num_elements + range_size)。仅当max_value渐近大于num_elements和range_size时,您的方法才会影响渐近复杂度。