我对合并排序的空间复杂性有一些困惑。它说它是O(n)。但是,如果我查看wiki中的实现,它看起来是O(nlogn)。
这是因为在每次递归调用时,我将数组分为左右两边。例如,让我们从第一次调用合并排序开始。它会将数组分成左右两半,我们已经需要n个空格。正如您在wiki实现中所看到的,它创建了两个新数组来保存左右部分。
现在相应地对左右两半进行两次递归调用,这将自己将它们的部分分成左右两部分,这将再次占用空间n将四个新的一半组合起来等等。
由于所有这些都是递归调用,因此内存在堆栈中反复消耗并累积到O(nlogn)。所以我认为这个特定实现的空间复杂度是O(nlogn)。
请提供一些见解?