algorithm - 最坏情况为 O(n) 的基数排序算法

标签 algorithm sorting big-o radix-sort

假设您有一个大小为 n 的整数数组 A。您事先知道 AO(√n) 个元素可以大于 2020(n)^(5) − 5n,并且A 的其余元素位于 [1, 2020n^5 − 5n] 范围内。事实证明,在这种情况下,在最坏的情况下,A 可以在 O(n) 时间内完成排序。

我正在尝试解决这个有趣的算法问题,我的直觉是使用基数排序作为我的解决方案的一部分。令我困惑的部分是 O(√n) 运行时,因此任何寻找此类算法的指针将不胜感激!

最佳答案

将范围内元素与范围外元素分开 (O(n))。对范围内的元素进行基数排序(基数为 n;对于 n ≥ 2020,这需要六遍,时间复杂度为 O(n))。对超出范围的元素进行插入排序(其中有 √n 个,因此 O(√n²) = O(n))。合并两个已排序的数组 (O(n))。

关于algorithm - 最坏情况为 O(n) 的基数排序算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67405203/

相关文章:

javascript - 将两个数组合并为所有可能组合的数组的算法

javascript - 在 Rally js "query"api 中,无法对已阻止​​进行排序

big-o - 为什么不存在小θ渐近符号?

algorithm - BFS 不可能找到的最短路径?

c++ - matlab 函数 "imfill(BW,' 孔的有效实现')“在 c++ 中不使用 opencv

javascript - 排序数组多维javascript

algorithm - 递归解决方案的最佳 Big O 时间效率是否始终与最佳空间效率相同?

python - Koch雪花渲染时间(以及如何使用turtle绘制雪花)

algorithm - 检查一个值是否属于哈希

javascript - 带闭包的对象中键的排序函数 - Javascript