一尘不染

数组中两类元素的稳定分离

algorithm

考虑以下问题。

我们获得了属于两个类别的元素数组:红色或蓝色。我们必须重新排列数组的元素,以便所有蓝色元素都在前(所有红色元素都在后)。重新排列必须以稳定的方式进行,这意味着必须保留蓝色元素的相对顺序(红色元素则相同)。

是否有一个聪明的算法可以就地执行上述重排?

当然,非就地解决方案很简单。

一个显而易见的就地解决方案是将任何稳定的排序算法应用于数组。但是,在数组上直观地使用完整的排序算法感觉有些过头,尤其是考虑到我们只处理两类元素这一事实。

任何想法表示赞赏。


阅读 204

收藏
2020-07-28

共1个答案

一尘不染

显然可以在O(n)时间和O(1)空间中执行此操作。纸张以线性时间稳定最小空间分割由Jyrki
Katajainen,和托米帕萨宁权利要求,以便能够做到这一点。

Google为0-1稳定排序。

2020-07-28