我正在执行Bucket排序,我正在接受int
参数,我想将其插入到最多可容纳8 ints
的节点“存储桶”中。一旦int
在节点中的数组中,我将执行有序搜索,以便它们按升序排列。我的问题是如何选择正确的节点“桶”来插入这些int
值?我认为一般来说,对于Bucket排序,你会得到桶的数量,但我不知道该怎么办。
我正在考虑以下几点:(看看我的水桶是否已满)
if(array[max] != 0)
{
array[size] = element;
size++;
}
else
{
int[] newArray = new int[max];
newArray[newSize] = element;
newSize;
}
但是接下来我将要使用最多5000个插入值的if else语句。知道如何选择合适的“桶”吗?
答案 0 :(得分:0)
在存储桶排序中,每个存储桶都分配了可能的键值的子范围,通常基于密钥的高位比特的值。每个输入元素都放在桶中,用于它所属的子范围。每个桶都是单独排序的,然后连接起来以获得排序结果。有关可视化,请参阅Bucket Sort。
每个存储桶都需要设计为包含可以映射到它的最大可能数量的元素。如果铲斗“满”,则无法完成排序。如果你有1000个桶,每个桶最多包含8个元素,你的输入键必须限制为整数的8000元素子范围。
你应该有一个简单的算术表达式,它基于产生该键的桶号的键值。例如,如果使用1000个桶对[0,7999]中的元素进行排序,则可以将键除以8并向下舍入为整数。通常,桶的数量是2的幂,并且密钥的桶号只是来自密钥的适当数量的高阶位。