我在一个网站上发现了这个关于计算排序算法的问题,这个问题是一个练习!我解决了这个问题,我想知道这是正确的吗?
练习: 使用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]
答案 0 :(得分:1)
应该是
numberOfElements<-- C[b]-C[a - 1]
回想一下C[i] = number of elements lower than or equal to i
。您不想减去等于a
的那些。
您还应该处理a = 0
以及a = 1
时的情况。