繁体   English   中英

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

[英]What is the most performant algorithm for sorting array elements?

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

我试过冒泡排序,但效率很低。 我尝试了使用递归的快速排序,但它会导致StackOverflowException ,因为输入非常大(几乎 2000 万)。

问题的时间限制只有5 秒 有没有人对如何更有效地实施这一点有任何想法?

您不一定需要递归地编写快速排序。

您可以采用递归算法,并将其重写为使用堆栈,从而避免递归。

示例实现:

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

我将支持您认为非比较类型的建议。 你说你正在对整数进行排序......具体的整数范围是什么,允许值落在其中? 计数/桶排序会很快。

快速排序可以就地编写。 由于它不需要(嗯,不多)额外的 memory,我认为如果您使用此版本不会导致错误。 如果你仍然有这种错误,你可以考虑随机化输入。

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

由于您只对整数进行排序,因此基数排序可能是一个好主意。 这个算法的好处是它总是花费相同的时间,这取决于要排序的元素数量,而不是它们的“未排序”程度。

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

该算法不仅非常有效,而且我还认为它易于理解和实现(嗯,至少对于排序算法而言)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM