有一个具有以下属性的数组A:
对于A中的每个x,y,如果x <然后,A中x的第一次出现是在A中首次出现y之前。
如何在avarage的O(n)中稳定排序数组A.
我正在攻读数据结构考试,我在尝试解决过去的考试时遇到了这个问题。
答案 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])