algorithm - 设计一个运行时间为 O(n lg d) 的排序算法

标签 algorithm sorting

假设我们事先知道未排序数组中的每条记录与其在已排序数组中的位置的距离最多为 d << n。我们想利用这个属性。假设所有 n 个键都是不同的。例如:令列表为 3 8 18 2 7 20 24 15 22 30 40。不难看出,对于这个未排序的列表,每条记录与其在排序数组中的位置的距离最多为 3。

设计一个运行时间为 O(n lg d) 的排序。

这是一道作业题。一些提示会很有用。

最佳答案

这是我的建议(我会发布完整的解决方案,但正如您所说,这是来自作业):

您已经知道某个元素位于正确索引的 2d 范围内。您如何能够扫描数组,但一次最多只能查看 2d 元素?

更具体地说,假设您刚刚通过检查从索引 i - di + d 的所有内容来找出第 i 个元素。您如何利用已知的知识在 O(log d) 时间内计算出第 i+1 个元素?

关于algorithm - 设计一个运行时间为 O(n lg d) 的排序算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17433081/

相关文章:

java - Java 中使用 ArrayList 的基本冒泡排序

algorithm - SICP中费马检验的增长顺序

algorithm - 圆形区域内的查询点

在滑动窗口中查找字符串匹配的算法

algorithm - 在估计算法的最坏情况执行时间 T(x,y) 时,我应该计算 if 语句吗?

algorithm - 减少一种算法

sorting - 使用 CUDA Thrust 同时对多个数组进行排序

python - 给定数字的最小排列

java - 对按字母顺序排列的列表中的两个值重新排序。枚举/比较器

Java8 对 Map 内的 Map 值进行排序