【发布时间】:2017-03-26 03:50:44
【问题描述】:
假设我有一个对象列表(数组)。这些对象中的每一个都有两个属性:时间戳和可选的父对象,它可以为空。我想先按时间戳对这个数组进行排序,这很容易;但是,我希望依赖对象保持连续。
例如,考虑这个简化的示例:三个对象 A、B 和 C。B 的父对象是 A,但时间戳是 A=1、B=3、C=2。按时间戳排序给出[A,C,B],但是因为B的父母是A,所以我希望B在A之后;所以理想的结果毕竟应该是[A, B, C]。
注意,如果两个或多个对象具有相同的父对象,它们应该都是相邻的,但它们仍然应该按时间戳相对排序。
最好的方法是什么?我能想到的唯一方法是按时间戳排序,然后遍历数组,对于每个依赖对象,将其移到其父对象之后;但这似乎效率低下,因为它需要额外的一轮迭代。有没有办法将分组合并到初始排序中,这样它就可以只完成一轮排序? (我目前正在使用 QuickSort,但如果需要,我可以切换到另一种算法。)
【问题讨论】:
-
旁注:我认为在排序后重新排序节点不会超过排序的复杂性(如果你小心的话),所以可能没问题。
标签: arrays algorithm sorting grouping