Algorithm 合并排序:是否需要额外的数组副本?

Algorithm 合并排序:是否需要额外的数组副本?,algorithm,memory-management,mergesort,Algorithm,Memory Management,Mergesort,在“算法简介”中,合并排序算法由一个名为merge(a,p,q,r)的辅助函数实现,该函数用于合并两个先前排序的序列 此函数引入两个附加数组L和R MERGE(A, p, q, r) 1 n1 ← q − p + 1 2 n2 ←r − q 3 create arrays L[1 . . n1 + 1] and R[1 . . n2 + 1] ..... 通过“创建数组L[1..n1+1]和R[1..n2+1]”我理解为它们分配额外的内存 有没有可能重新编写这个函数,这样我就不需要额外的内存,

在“算法简介”中,合并排序算法由一个名为
merge(a,p,q,r)
的辅助函数实现,该函数用于合并两个先前排序的序列

此函数引入两个附加数组
L
R

MERGE(A, p, q, r)
1 n1 ← q − p + 1
2 n2 ←r − q
3 create arrays L[1 . . n1 + 1] and R[1 . . n2 + 1]
.....
通过
“创建数组L[1..n1+1]和R[1..n2+1]”
我理解为它们分配额外的内存


有没有可能重新编写这个函数,这样我就不需要额外的内存,并直接操作到一个内存

当然。它称为就地合并排序

说它很复杂,但并不总是正确的。没有你想象的那么复杂


有一些方差,一些是稳定的,一些是不稳定的。有关示例,请参见下面的“实施”部分。

当然。它称为就地合并排序

说它很复杂,但并不总是正确的。没有你想象的那么复杂


有一些方差,一些是稳定的,一些是不稳定的。有关示例,请参见下面的“实现”部分。

是的,它被称为就地合并排序,但正如所述:

就地排序是可能的(例如,使用列表而不是数组),但非常复杂,在实践中,即使算法在O(n logn)时间内运行,也不会带来多少性能提升。(卡塔贾宁、帕萨宁和特霍拉,1996年)


是的,它被称为就地合并排序,但正如所说:

就地排序是可能的(例如,使用列表而不是数组),但非常复杂,在实践中,即使算法在O(n logn)时间内运行,也不会带来多少性能提升。(卡塔贾宁、帕萨宁和特霍拉,1996年)

这是可能的

这是可能的

另见此问题:另见此问题: