稳定的2值数组?

时间:2009-04-02 06:17:08

标签: algorithm sorting

我有一个对象数组。对象在其中有一个布尔值,我想用它作为一个键来排序数组(所有对象都带有true,所有对象都在false之前),但在其他方面保留相同的顺序。

是否有一个简单的,就地的O(n)解决方案?可能是radix-sort的一些变体?

3 个答案:

答案 0 :(得分:5)

有关此主题的讨论,请参阅here。您基本上可以使用需要额外空间的O(n)解决方案或O(n log n)就地解决方案。

答案 1 :(得分:0)

合并排序。 O(n log n)。

答案 2 :(得分:0)

嗯。使用链表是可行的 - 您将搜索第一个“false”条目并将其保留为“插入位置”。 (如果没有“假”条目,那么你无论如何都要完成:)然后只是遍历整个列表 - 如果你在插入位置之前找到一个“假”条目或者如果你在插入位置之后找到“真实”条目,然后将其移动到“插入位置”之前。到目前为止,O(n)

现在,您可以将数组转换为O(n)中的链接列表,然后将数据复制回O(n)中的数组中。所以我认为它可以用于复杂性 - 但它不是就地的。我会考虑是否可以就地完成......