长度为 N 的数组可以包含值 1,2,3 ... N^2。是否可以在 O(n) 时间内排序?

发布于 2024-10-03 06:13:52 字数 111 浏览 4 评论 0 原文

给定一个长度为 N 的数组。它可以包含范围从 1 到 N^2(N 平方)(包括这两个值)的值,值是整数。是否可以在 O(N) 时间内对这个数组进行排序?如果可以的话怎么办?

编辑:这不是作业。

Given an array of length N. It can contain values from ranging from 1 to N^2 (N squared) both inclusive, values are integral. Is it possible to sort this array in O(N) time? If possible how?

Edit: This is not a homework.

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

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

发布评论

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

评论(3

并安 2024-10-10 06:13:52

将每个整数以 N 为基数写入,即每个 x 都可以表示为 (x1, x2),其中 x = 1 + x1 + x2*N。现在,您可以使用 计数排序对其进行两次排序,一次在 x1 上,一次在 x2 上,结果是排序后的数组。

编辑:正如下面其他人提到的,像这样对每个“数字”单独排序被称为 基数排序。使用计数排序对每个数字进行排序需要 O(N) 时间和 O(N) 空间(在本例中)。由于我们正好重复两次,因此总运行时间为 O(N)。

Write each integer in base N, that is each x can be represented as (x1, x2) with x = 1 + x1 + x2*N. Now you can sort it twice with counting sort, once on x1 and once on x2, resulting in the sorted array.

EDIT: As others mentioned below, sorting on each 'digit' separately like this is is called a radix sort. Sorting on each digit with counting sort takes O(N) time and O(N) space (in this particular case). Since we repeat it exactly twice, this gives a total running time of O(N).

幸福不弃 2024-10-10 06:13:52

是的,您可以,使用 基数排序N 个存储桶两趟。基本上,您将这些数字视为具有 2 位以 N 为基数的数字。

Yes, you can, using radix sort with N buckets and two passes. Basically, you treat the numbers as having 2 digits in base N.

起风了 2024-10-10 06:13:52

可以使用 O(n) 时间内对具有明确定义的最大值的任何整数数组进行排序="nofollow">基数排序。对于您遇到的任何整数列表都可能出现这种情况。例如,如果您要对任意精度整数的列表进行排序,则事实并非如此。但所有 C 整数类型都有明确定义的固定范围。

It is possible to sort any array of integers with a well defined maximum value in O(n) time using a radix sort. This is likely the case for any list of integers you encounter. For example if you were sorting a list of arbitrary precision integers it wouldn't be true. But all the C integral types have well-defined fixed ranges.

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