C# C仅使用小于关系进行排序

C# C仅使用小于关系进行排序,c#,arrays,sorting,C#,Arrays,Sorting,如何在C中对对象数组进行排序,只使用小于关系。即,不使用三值IComparer 当数组的元素构成总顺序[1]时,使用IComparer接口和Array.Sort[0]方法不是问题。然而,在某些情况下,我们面临着对偏序集进行排序的任务[2]。在这些情况下,不可能正确实现IComparer接口。可能存在不小于、等于或大于某些其他元素的元素对 我总是可以实现自己的排序算法,接受小于谓词,但必须有一些库函数来实现,或者没有 [0] [1] [2] 我真的不明白你为什么要这么做?这会使你的排序变慢。通常返

如何在C中对对象数组进行排序,只使用小于关系。即,不使用三值IComparer

当数组的元素构成总顺序[1]时,使用IComparer接口和Array.Sort[0]方法不是问题。然而,在某些情况下,我们面临着对偏序集进行排序的任务[2]。在这些情况下,不可能正确实现IComparer接口。可能存在不小于、等于或大于某些其他元素的元素对

我总是可以实现自己的排序算法,接受小于谓词,但必须有一些库函数来实现,或者没有

[0]

[1]


[2] 我真的不明白你为什么要这么做?这会使你的排序变慢。通常返回-1/0/1的原因是只需检查两个元素一次; int[]myIntArray=新int[]{10,40,20,35,8}

当您将[0]与[4]进行比较时,您得到1,然后您就知道[4]小于[0],不需要再次将[4]与[0]进行核对

但是,如果只使用lessThan,则会得到false,并且在没有具体检查的情况下不知道[4]是否小于[0],因为10<8是false,而8<10是true

所以,你看,我想你并不是真的想用更少的。只需使用ICompare


此外,对于排序等,我认为使用列表比使用数组更好。较少装箱/拆箱。

感谢Nick在另一篇堆栈溢出帖子中找到了答案:


简言之;没有简单的库一行程序可以解决这个问题。

我认为框架中没有任何东西可以解决这个问题,不……当对象之间没有比较时,您如何排序?哦,好的。我看了你的链接!你如何对{}和{x,z}进行排序?如果你知道怎么做,你也可以用IComparer界面来做。怎么样:是的,它会阻止一些排序优化。有关IComparer无法工作的原因,请参阅部分订购集的链接。提示:这是一个完全等价关系,在po集合中不可用。我明白了。。。我想你最好用另一条线: