是否可以使用一个临时 variable/space 对数组进行排序?

Is it possible to sort an array using one temporary variable/space?

假设一个数组由 a1, a2, ..., ak, _ , a(k+1), ..., an 给出。 这里的下划线 (_) 表示空白 space。我们可以将任何数组元素移动到此 space。我们可以多次重复此操作。是否可以用一个这样的空白 space 对每个数组进行排序?

是的,这是可能的。

排序数组只是该数组的特定排列。

任何排列都可以通过一系列单独的交换来实现。

交换可以用一个临时元素来实现。

(实际上可以对整型数组 进行排序,而无需 临时值,使用异或运算。

就地排序有多种算法。最值得注意的是快速排序的非递归版本(因为递归版本将在堆栈上占用 space,与递归调用的次数成正比),平均而言,它会给你 O(n log n)复杂度。

另一种可能是使用效率较低的算法,例如插入排序和冒泡排序,其复杂度为O(n^2)。

关于你的具体问题,即使用那个特定的 space,你可以用它来交换,正如 Bathsheba 所说,但我不会浪费时间做这种操作。

还要考虑这样一个事实,如果您在数组中间有一个 "unused space" 的明确概念,您应该尝试理解它的语义,也就是说,它在排序方面的正确位置是什么.如果您不这样做,并且将其留在原处,您会发现自己有一个 "broken" 不变量,并且您将很难在您的集合上实现二进制搜索等算法。

我还没有在实际代码中看到过这样的容器,但是最容易实现的算法(不是最有效的!)是将空元素与第一个元素交换,然后在第一位交换最小元素与空元素,然后假设容器从第二个位置开始并重复直到最后一个位置,这将是空的 space。在这种情况下,交换只是意味着,填写空 space 并将其他位置标记为空。