我想知道以下排序算法的复杂性(如在O(...)中):
排序将每个桶中的所有元素组合在一个排序列表中:
或伪代码:
for i from 0 to N
smallest = MAX_ELEMENT
foreach b in B
if bIndex[b] < b.length && b[bIndex[b]] < smallest
smallest_barrel = b
smallest = b[bIndex[b]]
result[i] = smallest
bIndex[smallest_barrel] += 1
我认为复杂性将是O(n),但我发现复杂性的问题是,如果B增长,它比N增长具有更大的影响,因为它在B循环中添加了另一轮。但也许这对复杂性没有影响?
答案 0 :(得分:6)
由于您已经拥有伪代码,因此很容易找到复杂性。 你有2个嵌套循环。外部总是运行N-1次,内部总是| B |,其中| B |是B组(桶数)的大小。因此,复杂度为(N-1)* | B |这是O(NB)。
答案 1 :(得分:1)
你是正确的,桶数改变了复杂性。只要看看你的伪代码。对于您要选择的每个元素,您必须搜索候选数组,其长度为B.因此,您执行复杂度为O(B)N次的操作