假设我们事先知道未排序数组中的每个记录最多距离d <&lt;&lt; n从排序数组中的位置开始。我们想利用这个属性。假设所有n个密钥都是不同的。例如:让列表为3 8 18 2 7 20 24 15 22 30 40.不难看出,对于这个未排序的列表,每个记录与排序数组中的位置相距最多3个。
设计一个运行时间为O(n lg d)的排序。
是作业问题。一些提示将是有用的。
答案 0 :(得分:4)
这是我的提示(我发布了一个完整的解决方案,但正如你所说,这是来自作业):
您已经知道元素在正确索引的2d
范围内。您如何能够扫描数组,但只能一次查看最多2d
个元素?
更具体地说,假设您通过检查从索引i
到i - d
的所有内容来确定i + d
元素。您如何使用已知的内容在i+1
时间内找出O(log d)
元素?