使用计数排序算法的一部分来返回a和b之间的元素数

时间:2010-06-20 07:08:06

标签: algorithm analysis

我在一个网站上发现了这个关于计算排序算法的问题,这个问题是一个练习!我解决了这个问题,我想知道这是正确的吗?

练习: 使用Counting Sort算法的思想,并提供一个在0到k范围内的n整数的算法,在时间O(1)回答这些n个元素中有多少在区间[a,b]?当然,您的算法应该处理n个元素,这些元素可以帮助您获取a和b之间的数字(0≤a,b≤k)。这个基本过程应该是时间Θ(n + k)。

这是我的算法:

Algorithm Range(A,k,a,b)
{Consider C is the output array of PartOfCountingSort algorithm}
C<--PartOfCountingSort(A,k)
//finding the number of elements between a and b
numberOfElements<-- C[b]-C[a]+1
return numberOfElements
//end of the Range algorithm
------------------------------------
PartOfCountingSort(A,k)  // Theta(n+k)
OutPut: array C is the output of this algorithm
   for  i<-- 1 to k
      C[i]<-- 0
   for  j<-- 1 to A. length
      C[A[j]]<--C[A[j]]+1
   for  i<--2 to k
      C[i]<--C[i]+C[i-1]

1 个答案:

答案 0 :(得分:1)

应该是

numberOfElements<-- C[b]-C[a - 1]

回想一下C[i] = number of elements lower than or equal to i。您不想减去等于a的那些。

您还应该处理a = 0以及a = 1时的情况。