Space 不可变数组中合并排序的复杂性

Space complexity of merge sort in an immutable array

Space 合并排序的复杂度为 O(n),该方法看起来像 void sort(int[] arr)

如果我创建一个方法 int[] sort(int[] arr),它不修改输入数组,而是 returns 一个新的排序数组,那么这个 [=] 的 space 复杂度是多少17=] ?

取决于合并排序的实现。

递归

由于无法在每次递归调用中更改输入数组,因此 space 算法的复杂度为 S(n) = 2S(n/2) + n。因此,S(n) = Theta(n log n).

迭代

如果合并排序的实现不是递归的(迭代合并排序),您可以将输入数组复制到可变数组中,然后就地对该数组进行排序。因此,此合并排序实现的 space 复杂度为 Theta(n).