【问题标题】:Stable sort of 2 valued array?2值数组的稳定排序?
【发布时间】:2010-10-17 01:08:52
【问题描述】:

我有一个对象数组。对象中有一个布尔值,我想将其用作对数组进行排序的键(所有为 true 的对象都在所有为 false 的对象之前),否则保持相同的顺序。

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

【问题讨论】:

标签: algorithm sorting


【解决方案1】:

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

现在您可以将数组转换为O(n) 中的链表,并且可以将数据back复制到O(n) 中的数组中。所以我认为它会在复杂性方面起作用——但它不是就地的。我会考虑是否可以就地完成...

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-27
        • 2010-09-11
        • 1970-01-01
        • 2011-06-01
        • 2015-06-02
        • 2016-05-23
        相关资源
        最近更新 更多