考虑一下,在包含元素的情况下Merge Sort
,int Array
我们n
需要一个额外的大小数组n
来执行合并。尽管我们最终丢弃了额外的数组。所以合并排序的空间复杂度是O(n)
。但是如果你看一下递归mergeSort
过程,每次递归调用都会将mergeSort(something)
一个堆栈帧添加到堆栈中。它确实需要一些空间,对吧?
public static void mergeSort(int[] a,int low,int high)
{
if(low<high)
{
int mid=(low+high)/2;
mergeSort(a,low,mid);
mergeSort(a,mid+1,high);
merge(a,mid,low,high);
}
}
我的问题是:
- 为什么我们在计算合并排序复杂度时不考虑堆栈帧的大小?
- 是不是因为堆栈只包含几个整数变量和一个引用,不占用太多内存?
- 如果我的递归函数创建了一个新的本地数组(比如说
int a[]=new int [n];
)。那么在计算空间复杂度时会考虑它吗?