【发布时间】:2014-09-02 03:10:54
【问题描述】:
考虑n张标记为红色或蓝色的卡片
i=1;
j=n;
while(i<n)
{
if(a[i]==RED)
i++;
if(a[j]==BLUE)
j--;
swap(a[i],a[j]);
}
如何使这个就地算法稳定我可以得到一个 O(n^2) 的问题解决方案有人能建议一个 O(n) 的解决方案吗?
【问题讨论】:
-
如果
a数组只包含卡片颜色,为什么不只计算它们,然后通过填充适当的值来重新创建数组? -
@rostok 正如 OP 所建议的那样,这将不再存在。
-
我们可以使用辅助内存吗?说一个数组?
-
最简单的已知解决方案相当难看,而且 O(n log n) 时间的分治算法在当前硬件上可能会更快。
标签: algorithm sorting stable-sort