使用特殊 属性 对数组进行排序
Sorting an array with special property
有一个数组 A 具有以下 属性:
对于 A 中的每个 x,y,如果 x < y 则 x 在 A 中的首次出现早于 y 在 A 中的首次出现。
如何在平均 O(n) 的时间里稳定排序数组 A。
我正在准备数据结构考试,我在尝试解决过去的考试时遇到了这个问题。
由于 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])
有一个数组 A 具有以下 属性:
对于 A 中的每个 x,y,如果 x < y 则 x 在 A 中的首次出现早于 y 在 A 中的首次出现。
如何在平均 O(n) 的时间里稳定排序数组 A。
我正在准备数据结构考试,我在尝试解决过去的考试时遇到了这个问题。
由于 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])