Recursion 调用堆栈占用的内存是否应该考虑到空间复杂性?如果是这样,为什么堆排序的空间复杂度为O(1)?

Recursion 调用堆栈占用的内存是否应该考虑到空间复杂性?如果是这样,为什么堆排序的空间复杂度为O(1)?,recursion,heap,callstack,space-complexity,heapsort,Recursion,Heap,Callstack,Space Complexity,Heapsort,在计算空间复杂度时,是否考虑调用堆栈占用的内存 否则,堆排序的空间复杂度为O(1)是合理的 如果是这样,为什么堆排序的空间复杂度是O(1) 我知道maxHeap()是一个就地算法;因此,不需要辅助存储器。但maxHeap()是递归调用的,因此它与输入数组的大小成比例。(不是吗?)因此,在执行maxHeap()时,调用堆栈中占用的空间与数组的大小成正比。因此,空间复杂度应该是O(n)。这就是我的思考过程 请纠正我的错误。提前感谢。您是正确的,编写堆排序的递归实现很容易,它使用的空间远远超过O(1)

在计算空间复杂度时,是否考虑调用堆栈占用的内存

否则,堆排序的空间复杂度为O(1)是合理的

如果是这样,为什么堆排序的空间复杂度是O(1)

我知道maxHeap()是一个就地算法;因此,不需要辅助存储器。但maxHeap()是递归调用的,因此它与输入数组的大小成比例。(不是吗?)因此,在执行maxHeap()时,调用堆栈中占用的空间与数组的大小成正比。因此,空间复杂度应该是O(n)。这就是我的思考过程


请纠正我的错误。提前感谢。

您是正确的,编写堆排序的递归实现很容易,它使用的空间远远超过O(1)个。但是,如果小心的话,也可以编写一个使用O(1)空间的堆排序实现。注意,您不必使用递归来编写堆排序;如果您选择使用递归,请确保使用支持递归的语言。谢谢你的澄清。