所以快速排序的空间效率是O(log(n))。这是维护调用堆栈所需的空间。
现在,根据Quicksort 上的维基百科页面,这符合就地算法,因为该算法只是交换输入数据结构中的元素。
然而,根据此页面,O(log n) 的空间效率使快速排序无法到位,因为它的空间效率大于 O(1)。根据这个定义,任何空间效率大于 O(1) 的算法都不是就地的。所以我假设这意味着所有递归算法都没有按定义到位?
所以很明显这里有两种不同的就地定义。维基百科并不总是一个完全可靠的来源,所以我咨询了我的一位教授。
我的教授同意第二个定义。他说 Quicksort 没有到位。即使数据保留在输入数组中,堆栈所需的额外空间也会使其不合格。我的教授写了一本关于算法的流行书,所以我非常尊重他的意见,但这个答案对我来说似乎并不正确。
我认为就地的属性是相当字面的。数据保持不变。它不会脱离其原始数据结构。对我来说,这个定义更有用,因为它意味着您可以使用指针执行算法,而不是要求您复制数据。这似乎是算法的一个有价值的属性,并且配得上“就地”的名称。