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

时间:2013-07-02 18:25:49

标签: algorithm sorting

假设我们事先知道未排序数组中的每个记录最多距离d <&lt;&lt; n从排序数组中的位置开始。我们想利用这个属性。假设所有n个密钥都是不同的。例如:让列表为3 8 18 2 7 20 24 15 22 30 40.不难看出,对于这个未排序的列表,每个记录与排序数组中的位置相距最多3个。

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

是作业问题。一些提示将是有用的。

1 个答案:

答案 0 :(得分:4)

这是我的提示(我发布了一个完整的解决方案,但正如你所说,这是来自作业):

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

更具体地说,假设您通过检查从索引ii - d的所有内容来确定i + d元素。您如何使用已知的内容在i+1时间内找出O(log d)元素?