我有一个要排序的元素列表和一个比较函数cmp(x,y)
,它决定x
之前或y
之后是否应出现y
。问题是某些元素没有定义的顺序。 cmp
函数返回“不关心”。
示例:输入:[A,B,C,D]
和C > D
,B > D
。输出:许多正确的答案,例如[D,C,B,A]
或[A,D,B,C]
。我只需要输出所有可能的输出。
我无法使用Python的sort
来解决这个问题,我的解决方案是旧式冒泡 - 排序以空列表开头并一次插入一个元素保持列表始终排序的正确位置。
为此可以使用内置的sort
/ sorted
功能吗?关键是什么?
答案 0 :(得分:4)
无法使用内置排序。相反,您需要实现Topological Sort。
答案 1 :(得分:0)
内置排序方法要求cmp
强加总排序。如果比较不一致,则不起作用。如果它返回A< B一次它必须总是返回,并且它必须返回B>如果争论被颠倒了。
如果引入任意决胜局,您可以使cmp
实施工作正常。如果两个元素没有定义的顺序,请填一个元素。例如,您可以返回cmp(id(a), id(b))
- 通过任意ID号比较对象。