算法之空间复杂度:衡量一个算法运行需要开辟的额外空间
上次我们学习了时间复杂度,那么我们今天就来看看空间复杂度!
概念
空间复杂度是对一个算法在运行过程中临时占用空间大小的度量
和时间复杂度不是真的计算时间一样,空间复杂度也不衡量算法具体占用的内存字节数。
空间复杂度计算的是额外开辟的变量的个数,适用大O渐近法
注意:函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定。
空间复杂度计算
NO.1 冒泡排序
void BubbleSort(int* a, int n)
{
assert(a);
for (size_t end = n; end > 0; --end)
{
int exchange = 0;
for (size_t i = 1; i < end; ++i)
{
if (a[i-1] > a[i])
{
Swap(&a[i-1], &a[i]);
exchange = 1;
}
}
if (exchange == 0)
break;
}
}
我们会发现,