使用特殊属性对数组进行排序

时间:2015-02-08 15:10:15

标签: algorithm sorting data-structures

有一个具有以下属性的数组A:

对于A中的每个x,y,如果x <然后,A中x的第一次出现是在A中首次出现y之前。

如何在avarage的O(n)中稳定排序数组A.

我正在攻读数据结构考试,我在尝试解决过去的考试时遇到了这个问题。

1 个答案:

答案 0 :(得分:1)

由于A的属性,您知道所有元素的第一次出现已形成已排序的列表。其他事件需要在它们各自的第一次出现之后以输入顺序直接结束(因为你想要一个稳定的排序)。

您需要跟踪列表中的第一个匹配项。您需要在元素之间跟踪元素列表中的后续事件。最后,您可以在第一次出现时迭代列表,并在散列图中收集列表。

在伪代码中,类似于:

list: List(Element)
map: Map(Element -> List(Element))

foreach x in A
    if x exists in map
        map[x].add(x)
    else
        map.[x] = [x]
        list.add(x)

result = []
foreach x in list
    result.concat(map[x])