我正在学习不同的排序算法及其时间/空间复杂性,并发现冒泡排序和插入排序等算法的空间复杂度为O(1)。
这让我感到很奇怪,因为可能最低的空间复杂度可能是O(n)(就像存储数据集所需的内存一样)?
答案 0 :(得分:7)
空间复杂度实际上是算法使用的附加空间复杂度,即除了数据占用的初始空间之外所需的额外空间。除原始数据外,冒泡排序和插入排序仅使用一个恒定的额外空间,因此它们在空间复杂度方面为O(1)。
答案 1 :(得分:4)
排序算法具有空间复杂度O(1),通过分配恒定的空间量,例如用于迭代的一些变量等,与输入的大小不成比例。
在空间方面不是O(1)的排序算法的一个例子是mergesort的大多数实现,它分配一个辅助数组,使其成为O(n)。 Quicksort在理论上可能看起来像O(1),但是调用堆栈就像空间一样,因此它被称为O(log n)。
具有O(1)空间复杂度的排序算法示例包括:选择排序,插入排序,shell排序和heapsort。
答案 2 :(得分:0)
自下而上的合并排序可以这样一种方式编写,即它仅使用恒定的额外空间。这是仅使用O(n*log(n))
空间时的渐近最优排序(O(1)
)的示例。