Java 位运算(基数排序)

发布于 2024-07-09 07:54:22 字数 335 浏览 9 评论 0原文

有一天,我决定用 Java 编写 基数排序 的实现。 基数排序应该是 O(k*N) 但我的结果是 O(k^2*N) 因为将每个数字分解为一个数字的过程。 我通过将前面的数字取模(%)并除以十来消除后面的数字来分解每个数字。 我问我的教授是否有更有效的方法来做到这一点,他说使用位运算符。 现在我的问题是:哪种方法在 Java 中分解每个数字最快,1)上述方法。 2)将数字转换为字符串并使用子字符串。 3)使用位运算。

如果是 3) 那么这将如何运作?

The other day I decided to write an implementation of radix sort in Java. Radix sort is supposed to be O(k*N) but mine ended up being O(k^2*N) because of the process of breaking down each digit to one number. I broke down each digit by modding (%) the preceding digits out and dividing by ten to eliminate the succeeding digits. I asked my professor if there would be a more efficient way of doing this and he said to use bit operators. Now for my questions: Which method would be the fastest at breaking down each number in Java, 1) Method stated above. 2) Convert number to String and use substrings. 3) Use bit operations.

If 3) then how would that work?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

诠释孤独 2024-07-16 07:54:22

作为提示,请尝试使用 10 以外的基数,因为计算机处理二进制算术比处理十进制更好。

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

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

As a hint, try using a radix other than 10, since computers handle binary arithmetic better than decimal.

  • x >>> n is equivalent to x / 2n
  • x & (2n - 1) is equivalent to x % 2n

By the way, Java's >> performs sign extension, which is probably not what you want in this case. Use >>> instead.

鯉魚旗 2024-07-16 07:54:22

Radix_sort_(Java)

执行此操作的代码行;

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

是位操作部分。

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

Radix_sort_(Java)

The line of code that does this;

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

is the bit manipulation part.

& is the operator to do a bitwise AND and >> is a right-shift.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文