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

Algorithm 使用部分计数排序算法返回a和b之间的元素数,algorithm,analysis,Algorithm,Analysis,我在一个关于计数排序算法的网站上发现了这个问题,这个问题是一个练习!我解决了这个问题,我想知道这是正确的吗 练习: 使用计数排序算法的思想,提供一个n个整数在0到k范围内的算法,在时间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

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

练习: 使用计数排序算法的思想,提供一个n个整数在0到k范围内的算法,在时间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]
算法范围(A、k、A、b)
{考虑C是计算排序算法的一部分的输出数组}
C


numberOfElements@matin1234-否,对于
a=0
返回
C[b]
,对于
a=1
返回
C[b]-C[0]
。问题是,在计算排序的
部分
函数中没有初始化
C[0]
。它也应该初始化为0。还有,我为什么要处理“a=0,a=1”?我想我应该检查这个“a=b或bI”并用第一个for循环初始化C[0],我认为计数排序中的所有范围都以0开头!!@matin1234-如果需要,您可以检查
b
,在这种情况下没有解决方案。但是,您的问题陈述说
[a,b]
是一个区间,因此通常
b
不能低于
a
。您应该处理
a=0
,因为
C[b]-C[a-1]
C[b]-C[-1]
a=0时,并且
C[-1]
没有意义。您不初始化
C[0]
在第一个循环中,因为第一个循环从
1
开始。它需要从
0
开始。