基数排序C ++不屏蔽位

时间:2012-03-09 05:19:40

标签: c++ data-structures radix-sort

我有一个队列和一组队列。 buckets是数组,collector是队列。 pass是一个整数,可以保存它的传递。我有一个方法,它返回给我的名为peek()的队列的第一个单元格的包含。 shiftOne()是一种将一个队列的头部移动到另一个队列的尾部的方法。

现在这段代码对我不起作用

bucket[((collector.peek()>>(pass * 8)) &0xFF)].shiftOne(collector);

我已经一步一步走了,事实证明我没有正确掩盖这些位。我可以改变它们,但这就是它。因此,我将尝试访问元素102以获取10个元素的数组。我究竟做错了什么?我知道peek()shiftOne(),因为我可以使用幂和模数进行排序。

1 个答案:

答案 0 :(得分:2)

你把radix-10与radix-2混淆了。

比特移位除以2,例如:102 >> 1 = 102 / 2 = 51。
同样:102 >> 8 = 102 / 2^8 = 102 / 256 = 0(int条款)。

例如,代码(i >> 8) & 0xFF用于提取给定i值的第二个字节的内容。

对于你的情况 - 坚持使用模数为10的除法。