【问题标题】:Sorting integers in given interval在给定间隔内对整数进行排序
【发布时间】:2017-06-10 12:00:09
【问题描述】:

我在区间[0,n^c] 中有n 整数,其中c 是某个正整数。

我可以使用哪种算法在线性时间内对这些整数进行排序?

我确实通过以下问题查看了 RadixSort:给定间隔最长数字最多具有 cnlogn 个数字,那么 RadixSort 不会在 O(nlogn) 时间内运行吗?

【问题讨论】:

  • 我相信您正在寻找的是基数排序
  • Sorting in linear time?的可能重复
  • @Coldspeed:我确实看过基数排序。但是,如果我正确理解基数排序,我需要 m 个“Buckets”,其中 m 是最长整数的位数。给定我的区间,“最长”数字最多有 c*logn 数字(以 10 为底)
  • radixSort 的运行时间不会是 O(nlogn) 而不是 O(n),因为数字的长度是 c*nlogn ???

标签: algorithm


【解决方案1】:

使用基数排序。你可能会说效率不够,因为位数是 log(n^c),所以总时间复杂度是 O(nlogn)。但是,您不必以 10 为基数进行排序!您可能可以在恒定时间内将您的数字转换为以 n 为底(取决于 n),并以 n 为底进行基数排序,因为 log_n(n^c) = c。

【讨论】:

  • 我认为你是对的。要将其中一个整数转换为基数 n,我最多需要 c 操作。所以我可以在 c*n=O(n) (线性时间)中转换我所有的 n 个整数。此外,数字的长度始终以 c 为界。
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2015-05-24
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多