什么是最高性能的数组元素排序算法?

时间:2011-07-17 16:00:36

标签: performance algorithm sorting language-agnostic

我正在解决UVa网站问题,我有一个问题,我必须尽可能快地对整数进行排序。

我尝试过冒泡排序,但效率很低。我尝试过快速排序,它使用递归,但结果是StackOverflowException,因为输入非常大(差不多20百万)。

问题的时间限制仅为 5秒。有没有人对如何更有效地实现这个有任何想法?

6 个答案:

答案 0 :(得分:3)

您不一定需要递归编写quicksort。

你可以采用递归算法,然后重写它以使用堆栈,避免递归。

此示例实现:

答案 1 :(得分:3)

我使用C和qsort()函数解决了这个问题,试一试。

答案 2 :(得分:3)

我会考虑你考虑非比较排序的建议。你说你正在排序整数......特别是整数范围是允许落入内部的值?计数/桶排序会非常快。

答案 3 :(得分:2)

Quicksort可以写成in-place。由于它不需要(嗯,不多)额外的内存,我不认为如果你使用这个版本会导致错误。如果你仍然有这种错误,你可以考虑随机输入。

此外,您可以考虑非比较排序,例如counting sort。这些排序算法有其自身的局限性,但通常需要较少的时间,例如O(n)。

答案 4 :(得分:2)

由于您只对整数进行排序,radix sort可能是个好主意。这个算法的优点在于它总是占用相同的时间量,这取决于要排序的元素数量,而不是它们是如何“未排序”的。

另请参阅Donald Knuth的计算机编程艺术第3卷,排序和搜索。该算法在 5.2.5节中描述。按分布排序,从第168页开始。算法的伪代码是算法R ,第172页(第二版的页码)。

算法不仅效率很高,而且我认为它很容易理解和实现(至少对于排序算法而言)。

答案 5 :(得分:1)

使用Timsort:http://en.wikipedia.org/wiki/Timsort

哪个不可能解决你的StackOverflow。您可以使用堆栈迭代地实现它们。