Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Algorithm 无额外空间或就地合并排序_Algorithm_Sorting_Language Agnostic - Fatal编程技术网

Algorithm 无额外空间或就地合并排序

Algorithm 无额外空间或就地合并排序,algorithm,sorting,language-agnostic,Algorithm,Sorting,Language Agnostic,可能重复: 通常我们使用一个额外的数组来使用合并排序对其进行排序,是否可以在不使用额外空间的情况下执行此操作 如果这是可能的,那么合并排序会比快速排序好,对吗?是的,可以执行一个。这并不意味着它不需要任何额外的内存,因为递归仍然需要O(lgn)堆栈空间(就像快速排序一样) 编辑:我很久没有读过卡塔杰宁的论文了,我从来没有注意过空间复杂性的说法;显然,合并排序可以在O(1)个额外空间中完成 但不,所有这一切并不意味着一种算法比另一种算法更好,除非你具体说明这个词的意思。随机化快速排序虽然可以是二

可能重复:

通常我们使用一个额外的数组来使用合并排序对其进行排序,是否可以在不使用额外空间的情况下执行此操作


如果这是可能的,那么合并排序会比快速排序好,对吗?

是的,可以执行一个。这并不意味着它不需要任何额外的内存,因为递归仍然需要O(lgn)堆栈空间(就像快速排序一样)

编辑:我很久没有读过卡塔杰宁的论文了,我从来没有注意过空间复杂性的说法;显然,合并排序可以在O(1)个额外空间中完成


但不,所有这一切并不意味着一种算法比另一种算法更好,除非你具体说明这个词的意思。随机化快速排序虽然可以是二次排序,但不管输入是什么,它仍然执行较小的预期操作数。哪一个对您的数据“效果更好”取决于从数据统计到程序运行的硬件的各种因素。

是的,可以执行一个测试。这并不意味着它不需要任何额外的内存,因为递归仍然需要O(lgn)堆栈空间(就像快速排序一样)

编辑:我很久没有读过卡塔杰宁的论文了,我从来没有注意过空间复杂性的说法;显然,合并排序可以在O(1)个额外空间中完成


但不,所有这一切并不意味着一种算法比另一种算法更好,除非你具体说明这个词的意思。随机化快速排序虽然可以是二次排序,但不管输入是什么,它仍然执行较小的预期操作数。哪个对你的数据“效果更好”取决于从数据统计到程序运行的硬件的各种因素。

IIRC我在这个问题上引用的论文表明,你可以在
O(1)
空间,no
O(logn)
堆栈中真正做到这一点。它只是很慢,
O(nlogn)
但是与更常见的排序相比,它的常量很大。但我最近没有重读过。@SteveJessop:我也没有,但我还是回避了答案。@larsmans谈到了
O(1)
额外空间,它是否包括
for
循环中声明的变量所占用的单位空间?只是一个想法。@ChaZ:是的,因为这个算法中的循环变量不是指向可变大小数据结构的指针。@ChaZ:是的,除了在递归中。IIRC我在这个问题上引用的论文表明,你可以在
O(1)
空间中真正做到这一点,而不是
O(logn)
堆栈中。它只是很慢,
O(nlogn)
但是与更常见的排序相比,它的常量很大。但我最近没有重读过。@SteveJessop:我也没有,但我还是回避了答案。@larsmans谈到了
O(1)
额外空间,它是否包括
for
循环中声明的变量所占用的单位空间?只是一个想法。@ChaZ:是的,因为这个算法中的循环变量不是指向可变大小数据结构的指针。@ChaZ:是的,除了递归。