我想了解以下排序算法的复杂度(如O(...)):
- 有B个桶
- 这些桶中不均匀地分布着N个元素。
- 每个桶中的元素已经排序好了。
该排序算法将每个桶中的所有元素组合成一个排序后的列表:
- 使用大小为B的数组存储每个桶中最后一个排序元素(从0开始)
- 检查每个桶(在最后存储的索引处)并找到最小的元素
- 将元素复制到最终排序的数组中,增加数组计数器
- 增加我们选择的桶的最后一个排序元素
- 重复上述步骤N次
或者用伪代码表示:
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循环中增加另一个循环。但也许这对复杂度没有影响?