基数排序C++不屏蔽位

Radix Sort C++ Not masking bits

本文关键字:屏蔽 C++ 基数排序      更新时间:2023-10-16

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

现在这个代码不适用于我

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

我一步一步地走,结果发现我没有正确地掩盖这些部分。我可以移动它们,但仅此而已。所以我将尝试访问10元素数组的元素102。我做错了什么?我知道peek()shiftOne(),因为我可以使用幂和模进行排序。

您混淆了基数-10和基数-2。

比特移位被2除,因此例如:102 >> 1102 / 2=51。
类似地:102 >> 8102 / 2^8102 / 256=0(在int术语中)。

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

对于你的情况,坚持用模数除以10。