Sorting 比较函数必须是对称的吗?(或:使用Don&x27;t care值对列表进行排序)

Sorting 比较函数必须是对称的吗?(或:使用Don&x27;t care值对列表进行排序),sorting,Sorting,我有一个带有枚举属性的对象列表,我希望按照它进行排序。在枚举值中,我只关心A、B和C,并要求在排序列表中,A

我有一个带有枚举属性的对象列表,我希望按照它进行排序。在枚举值中,我只关心A、B和C,并要求在排序列表中,A 在执行比较时,是否有必要为无关枚举值相对于临界值指定一致的顺序?例如,如果a、D之间的比较结果为-1,而D、a之间的比较结果为0,或同时为-1,是否会导致问题

这段代码是在C#中实现的,我相信它使用了快速排序。在回顾了快速排序算法之后,如果一个无关值成为轴心,这可能是一个问题


从实现角度看——对这样的事情进行排序的最佳方式是什么?必须显式地处理无关的值会导致更多的情况需要处理。我可能会给枚举赋值,但不能保证不会有其他情况下有用的不同排序顺序。我不确定仅仅假设列表在排序之前会被去掉额外的值是否足够,因为如果违反了假设,这可能会导致很难发现的bug。当使用这些值时,我可以抛出ArgumentException,但这样我就可以添加足够的案例,这样我就可以对它们进行排序了。我能想到的最佳选择是创建一个强制转换函数,将枚举转换为int。

通常,比较需要一致。(我并不是说所有的算法都是这样,但它是针对
qsort
的,你真的应该坚持这一点。)

<> P>你可以使你的情况更简单,只是考虑所有不有趣的值是相等的,并且它们都小于或大于C.

这样,它们将被压缩在结果的顶部或底部,并且您的比较函数不应该太复杂