排序算法如何具有O(1)的空间复杂度?

时间:2017-05-10 11:37:07

标签: algorithm sorting time complexity-theory space

我正在学习不同的排序算法及其时间/空间复杂性,并发现冒泡排序和插入排序等算法的空间复杂度为O(1)。

这让我感到很奇怪,因为可能最低的空间复杂度可能是O(n)(就像存储数据集所需的内存一样)?

3 个答案:

答案 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))的示例。