排序部分有序列表的最佳方法是什么?

mik*_*e g 7 language-agnostic sorting algorithm partial-ordering topological-sort

可能最好用一个小例子来说明.
鉴于这种关系

A < B < C
A < P < Q 
Run Code Online (Sandbox Code Playgroud)

正确的产出将是

ABCPQ or APQBC or APBCQ ... etc.
Run Code Online (Sandbox Code Playgroud)

换句话说,任何排序都是有效的,其中给定的关系成立.

我最感兴趣的是最容易实现的解决方案,但速度和时间方面的最佳O(n)也很有趣.

sta*_*lue 9

这称为拓扑排序.

标准算法是输出一个最小元素,然后将其删除并重复直到完成.