Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 排序数组元素最有效的算法是什么?_Performance_Algorithm_Sorting_Language Agnostic - Fatal编程技术网

Performance 排序数组元素最有效的算法是什么?

Performance 排序数组元素最有效的算法是什么?,performance,algorithm,sorting,language-agnostic,Performance,Algorithm,Sorting,Language Agnostic,我正在解决UVa站点的问题,我有一个问题,我必须尽快对整数排序 我试过泡沫排序法,但效率很低。我尝试过使用递归的快速排序,但它会导致StackOverflowException,因为输入非常大,几乎有2000万 问题的时限只有5秒。有没有人对如何更有效地实现这一点有什么想法?使用Timsort: 这不可能解决堆栈溢出问题。您可以使用堆栈迭代地实现它们。使用Timsort: 这不可能解决堆栈溢出问题。您可以使用堆栈迭代地实现它们。您不一定需要递归地编写快速排序 您可以采用递归算法,并将其重写为使用

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

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

问题的时限只有5秒。有没有人对如何更有效地实现这一点有什么想法?

使用Timsort:

这不可能解决堆栈溢出问题。您可以使用堆栈迭代地实现它们。

使用Timsort:


这不可能解决堆栈溢出问题。您可以使用堆栈迭代地实现它们。

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

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

这方面的示例实现:


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

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

这方面的示例实现:

可以编写快速排序。因为它不需要太多额外的内存,我认为如果你使用这个版本,它不会导致错误。如果你仍然有这样的错误,你可以考虑随机化输入。

也可以考虑非比较排序,例如。这类排序算法有其自身的局限性,但通常需要较少的时间,例如打开。可以编写快速排序。因为它不需要太多额外的内存,我认为如果你使用这个版本,它不会导致错误。如果你仍然有这样的错误,你可以考虑随机化输入。


也可以考虑非比较排序,例如。这些排序算法有其自身的局限性,但通常需要较少的时间,例如ON。

< P>我用C和函数解决了这个问题,给出了一个尝试。

< P>我用C和函数解决了这个问题,试试看。

< P>我会建议你考虑非比较排序。你说你在对整数排序。。。具体来说,允许值落在什么整数范围内?计数/桶排序将是愚蠢的快。

我会建议你考虑非比较排序。你说你在对整数排序。。。具体来说,允许值落在什么整数范围内?计数/桶排序速度太快了。

因为您只对整数进行排序,这可能是个好主意。该算法的优点在于,它总是花费相同的时间,这取决于排序的元素数量,而不是它们的未排序程度

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


该算法不仅效率很高,而且我认为它很容易理解和实现,至少对于排序算法来说是这样。

因为您只对整数排序,这可能是个好主意。该算法的优点在于,它总是花费相同的时间,这取决于排序的元素数量,而不是它们的未排序程度

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


该算法不仅非常有效,而且我认为它很容易理解和实现,至少对于排序算法来说是如此。

Timsort在我看来是非常有文档记录的。我已经尝试实现了很多不同的排序算法,它在我的待办事项列表中。然而,我还没有找到一个精确、简洁的规范来说明它是如何工作的。我已经尝试实现了很多不同的排序算法,它在我的待办事项列表中。然而,我还没有找到一个精确、简洁的规范来说明它是如何工作的。如果输入是这样的,那么你的问题应该有一个更简单的算法。无需排序或约束排序。你能给出问题的id吗?一个正确编写的递归快速排序,只需要使用OLOGN堆栈。限制必须非常严格,以防止处理2000万个元素。您可以通过在较小的分区上调用递归来实现这一点,并通过循环来实现较大的分区,因此您的函数只能是单个递归的。看看为什么会这样。只有多重递归快速排序需要堆栈深度上的风险。您是否尝试使用随机枢轴进行快速排序?正如Steve Jessop所说,一个写得很好的快速排序只会重现到一个部门

奥洛格的h。此外,UVa不会阻止您使用随语言提供的任何内置排序算法。你应该看看STD::C++中的排序,java中的Arrays.sort或c@ @ Mak:我使用C++,但是没有STD::排序类存在吗?如果输入是这样的,你的问题应该有一个更简单的算法。无需排序或约束排序。你能给出问题的id吗?一个正确编写的递归快速排序,只需要使用OLOGN堆栈。限制必须非常严格,以防止处理2000万个元素。您可以通过在较小的分区上调用递归来实现这一点,并通过循环来实现较大的分区,因此您的函数只能是单个递归的。看看为什么会这样。只有多重递归快速排序需要堆栈深度上的风险。您是否尝试使用随机枢轴进行快速排序?正如Steve Jessop所说,编写良好的快速排序只会在Ologn的深度出现。此外,UVa不会阻止您使用随语言提供的任何内置排序算法。你应该看看STD::C++中的排序,java中的Arrays.sort或c@ @ Mak:我使用C++,但是没有STD::排序类存在吗?如果递归写入,即使是就地快速排序也可能溢出堆栈。堆栈具有一定的最大深度,因此限制因素是递归调用的深度,这与正在使用的算法无关。如果以递归方式写入,即使是就地快速排序也可能溢出堆栈。堆栈有一定的最大深度,因此限制因素是递归调用的深度,这与正在使用的算法无关。因此,您对算法问题的回答是使用其他人编写的函数?这是UVa,对于这些问题,你不需要重新发明轮子。我已经解决了200多个问题,你可以用你能用的。如果想法是学习这些算法是如何工作的,那么重点就是重新发明轮子。在这种情况下,给qsort打电话除了告诉你做这件事的人真的很聪明之外,什么也教不了你。他没有要求解释,他只是想知道如何快速做,我只是告诉他我用来解决这个问题的方法,这里还有很多关于排序方法的链接和解释,我不认为大多数人意识到这是一个UVa问题。你应该使用标准库来处理像这样的简单问题更难的问题仍然需要大量的算法知识所以你对算法问题的回答是使用其他人编写的函数?这是UVa,对于这些问题,你不需要重新发明轮子。我已经解决了200多个问题,你可以用你能用的。如果想法是学习这些算法是如何工作的,那么重点就是重新发明轮子。在这种情况下,给qsort打电话除了告诉你做这件事的人真的很聪明之外,什么也教不了你。他没有要求解释,他只是想知道如何快速做,我只是告诉他我用来解决这个问题的方法,这里还有很多关于排序方法的链接和解释,我不认为大多数人意识到这是一个UVa问题。您应该使用标准库来处理像这样的简单问题,更难的问题仍然需要大量的算法知识