11

在 .NET 中实现 IComparable 之类的东西时,任何人都可以建议 .NET 使用什么排序算法对底层数据进行实际排序?使用的算法是可定制的还是可选择的?

4

2 回答 2

17

有两个大佬。

Array.Sort(对数组进行就地排序)使用不稳定的 Quicksort

List<T>.Sort根据 MSDN 文档,这与 内部使用的实现相同:

此方法使用Array.Sort,它使用 QuickSort 算法。

Enumerable.OrderBy<TSource, TKey>方法(对输入序列的副本进行排序)使用稳定的 Quicksort

据我所知,这是 .NET BCL 中仅有的两种排序实现。

于 2011-05-11T03:10:39.993 回答
5

MSDN 文档指出使用的排序算法是快速排序(至少对于数组)——这是不可选择或可定制的。

请注意,它不是IComparable指定使用哪种排序方法的接口,它取决于进行排序的方法或类(通常是数组或列表,但它可以是任何方法),例如它完全可以用于数组和列表使用完全不同的算法进行排序(尽管实际上两者都使用快速排序)

这意味着,如果您真的愿意,您可以使用替代算法实现您自己的排序方法。

于 2011-05-11T03:06:03.740 回答