[英]What is the most performant algorithm for sorting array elements?
我正在解决 UVa 站点问题,我有一个问题是我必须尽快对整数进行排序。
我试过冒泡排序,但效率很低。 我尝试了使用递归的快速排序,但它会导致StackOverflowException
,因为输入非常大(几乎 2000 万)。
问题的时间限制只有5 秒。 有没有人对如何更有效地实施这一点有任何想法?
您不一定需要递归地编写快速排序。
您可以采用递归算法,并将其重写为使用堆栈,从而避免递归。
示例实现:
我使用 C 和qsort() function 解决了这个问题,试一试。
我将支持您认为非比较类型的建议。 你说你正在对整数进行排序......具体的整数范围是什么,允许值落在其中? 计数/桶排序会很快。
由于您只对整数进行排序,因此基数排序可能是一个好主意。 这个算法的好处是它总是花费相同的时间,这取决于要排序的元素数量,而不是它们的“未排序”程度。
另请参阅 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.