前几天,我决定用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))

执行此操作的代码行; 通用标签

是位操作部分。

&是按位与的运算符,>>是右移。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top