Java位操作(基数排序)

时间:2008-12-01 17:29:57

标签: java sorting radix-sort number-manipulation

前几天我决定用Java编写radix sort的实现。基数排序应该是O(k * N),但由于将每个数字分解为一个数字的过程,我的最终为O(k ^ 2 * N)。我通过修改(%)前面的数字并除以10来分解每个数字以消除后续数字。我问我的教授是否会有更有效的方法来做这个,他说要使用位操作符。现在我的问题是:哪种方法在分解Java中的每个数字时最快,1)上述方法。 2)将数字转换为String并使用子字符串。 3)使用位操作。

如果3)那么它将如何运作?

2 个答案:

答案 0 :(得分:3)

作为提示,尝试使用10以外的基数,因为计算机处理的二进制算法优于十进制。

  • x>>> n相当于x / 2 n
  • x& (2 n - 1)相当于x%2 n

顺便说一下,Java的>>执行符号扩展,在这种情况下可能不是你想要的。使用>>>代替。

答案 1 :(得分:2)

[http://en.literateprograms.org/Radix_sort_(Java)](http://en.literateprograms.org/Radix_sort_(Java))

执行此操作的代码行;

 int key = (a[p] & mask) >> rshift;

是位操作部分。

&安培;运算符是按位AND和>>是一个右移。