是否可以在线性时间内排序整数数组?

时间:2012-03-08 19:42:53

标签: sorting

有一天,我正在阅读有关谷歌和微软实习面试的博客,我读到其中一个问题是如何在线性时间内订购整数数组。

我认为订购东西的最佳方式是O(n log(n)),如Mergesort或Quicksort,但知道我不确定。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

嗯,问题肯定有一些限制。例如,如果数组只包含少量重复数字[1 3 2 6 3 1 2],您可以使用counting sort在线性时间内执行此操作,但它会占用更多空间。

您可以注意的另一种算法是Dutch National Flag算法,该算法可以在线性时间内对3个重复数进行排序。除此之外,我不认为(这里的无知不是幸福:P)我知道一种在线性时间内对正常数组进行排序的方法。

即使您使用Radix sort,也会占用O(m * n),但如果m <<< n您可以认为其大约O(n)

答案 1 :(得分:2)

O(n lg n)是您为基于比较的排序所能做的最好的事情,除了您如何比较之外,您不需要了解任何有关您正在排序的项目的信息。 。对有界大小的整数列表进行排序(即,每个整数最多为K,其中K独立于n)是一个更专业的问题,因此您可以使用更专业的运行速度超过O(n lg n)的算法(例如基数排序)。