这种排序情况的好(简单)算法/方法是什么:
我有一个项目数组,其中每个项目包含2个字段:(ID,Timestamp)
有许多具有相同ID的项目。
我想对数组进行排序,使得项目尽可能在ID之间交替,从具有最早时间戳的项目开始。
例如,使用此输入:
(1,15:00)
(1,15:05)
(1,15:10)
(2,15:15)
(2,15:20)
(2,15:25)
(3,15:30)
(4,15:35)
(3,15:40)
我会得到这个输出:
(1,15:00)
(2,15:15)
(3,15:30)
(4,15:35)
(1,15:05)
(2,15:20)
(3,15:40)
(1,15:10)
(2,15:25)
我主要是在寻找一种概念上简单的算法,当然,如果它具有高性能,那就太好了。
现在我能想到的最好的是:
答案 0 :(得分:2)
完成后,如果我已正确理解问题,结果将按您想要的顺序排列。
以下是Java中的示例,使用Guava TreeMultimap
s(未经测试):
TreeMultimap<Id, Timestamp> map = new TreeMultimap<Id, Timestamp>();
for (/* ... every item ... */) {
map.put(item.getId(), item.getTimestamp());
}
List<Entry> outputList = new ArrayList<Entry>();
while (!map.isEmpty()) {
for (Id key : map.keySet()) {
Timestamp value = map.get(key).first();
outputList.add(new Entry(key, value));
map.remove(key, value);
}
}
return outputList;