考虑以下问题。
我们获得了属于两个类别的元素数组:红色或蓝色。我们必须重新排列数组的元素,以便所有蓝色元素都在前(所有红色元素都在后)。重新排列必须以稳定的方式进行,这意味着必须保留蓝色元素的相对顺序(红色元素则相同)。
是否有一个聪明的算法可以就地执行上述重排?
当然,非就地解决方案很简单。
一个显而易见的就地解决方案是将任何稳定的排序算法应用于数组。但是,在数组上直观地使用完整的排序算法感觉有些过头,尤其是考虑到我们只处理两类元素这一事实。
任何想法表示赞赏。
显然可以在O(n)时间和O(1)空间中执行此操作。纸张以线性时间稳定最小空间分割由Jyrki Katajainen,和托米帕萨宁权利要求,以便能够做到这一点。
Google为0-1稳定排序。