Is imperative Quicksort in situ (in-place) or not?

后端 未结 2 1594
不知归路
不知归路 2020-12-11 01:20

Quicksort is often described as an in situ (in-place) algorithm, despite the fact that it requires O(log n) stack space. So does in situ mean \"requires le

相关标签:
2条回答
  • 2020-12-11 01:31

    is Quicksort actually not an in situ algorithm?

    The standard implementation of it is not in situ. It's a horribly common misconception, but you as correctly note due to stack space consumption, that conception is wrong.

    I say "standard implementation" of it because people have modified the algorithm to make it an O(1)-space algorithm. Here is one example: Quicksort without a stack.

    Of course, consistent with the classic space-time tradeoff, such versions of quicksort are less performant than the standard implementation.

    0 讨论(0)
  • 2020-12-11 01:47

    Wikipedia offers the following definition:

    In computer science, an in-place algorithm (or in Latin in situ) is an algorithm which transforms input using a data structure with a small, constant amount of extra storage space.

    By this definition, the typical stack-based quicksort is clearly not an in situ algorithm.

    In fact, the Wikipedia article explicitly discusses this:

    An algorithm is sometimes informally called in-place as long as it overwrites its input with its output. In reality this is not sufficient (as the case of quicksort demonstrates) nor is it necessary; the output space may be constant, or may not even be counted, for example if the output is to a stream.

    and

    Quicksort is commonly described as an in-place algorithm, but is not in fact one. Most implementations require O(log n) space to support its divide and conquer recursion.

    However, as pointed out by @Jason in his excellent answer, there appear to exist variants of quicksort that only require O(1) extra space. Any such alorithms would be considered in situ.

    0 讨论(0)
提交回复
热议问题