【发布时间】:2012-06-27 13:15:36
【问题描述】:
我有一些任意对象的列表,出于示例的目的,假设它们是 (integer, something-else) 对,但它们本质上可能是任何对象:
[(5, a), (3, c), (2, f), (3, a), (4, c), (1, d), (5, b), (5, d)]
我想根据它们的属性之一对这些对象进行分组,以便共享所述属性的相同值的元素在结果列表中相邻。例如,上面的列表按整数值分组:
[(3, a), (3, c), (1, d), (4, c), (2, f), (5, b), (5, a), (5, d)]
如您所见,不需要任何顺序,操作也不需要稳定。
天真的方法是对列表进行排序。这具有众所周知、经过充分测试和足够快的优点。
不过,我很好奇:是否有一种不涉及排序的算法,同时在复杂性方面具有竞争力(O(n) 时间与O(n) 空间或 @ 987654326@时间与O(1)空间)?
【问题讨论】:
-
有
O(1)空格的排序算法,这里排序很自然。 -
定义“合理”的空间。 O(n) 合理吗?
-
@amit:是的,是的。编辑了问题。
-
@unkulunkulu:我完全清楚这一点。但坚持
sort并不足以满足我的好奇心。
标签: arrays algorithm list language-agnostic