Java位操作(在基数排序中)
-
22-07-2019 - |
题
前几天,我决定用Java编写基数排序的实现。基数排序应该是O(k * N),但由于将每个数字分解为一个数字的过程,我的最终结果是O(k ^ 2 * N)。我通过修改(%)前面的数字并除以十以消除后继的数字来分解每个数字。我问我的教授是否会有更有效的方法,他说使用位运算符。现在,我的问题是:哪种方法是分解Java中每个数字最快的方法,1)上述方法。2)将数字转换为字符串并使用子字符串。3)使用位操作。
如果是3),那将如何工作?
解决方案
作为提示,请尝试使用非10的基数,因为计算机处理二进制算术要好于十进制。
- x >>> n等效于x / 2 n
- x&(2 n -1)等于x%2 n
顺便说一句,Java >>执行符号扩展,在这种情况下,这可能不是您想要的。使用>>>代替。
其他提示
[http://en.literateprograms.org/Radix_sort_(Java)
]( http://en.literateprograms.org/Radix_sort_(Java))
执行此操作的代码行; 通用标签
是位操作部分。
&是按位与的运算符,>>是右移。
不隶属于 StackOverflow