.NET框架实现了什么排序算法
有人可以建议在 .NET 中实现 IComparable 之类的东西时 .NET 使用什么排序算法来实际对底层数据进行排序吗?另外,所使用的算法是可定制的还是可选择的?
Could anyone please advise when implementing something like IComparable in .NET what sorting algorithm does .NET use to actually sort the underlying data? Also is the algorithm used customizable or selectable?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
有两个大人物。
Array.Sort
(就地对数组进行排序)使用不稳定 快速排序。这与
List.Sort
,根据MSDN文档:
Enumerable.OrderBy
方法(对输入序列的副本进行排序)使用稳定的快速排序。据我所知,这是 .NET BCL 中仅有的两个排序实现。
There are two biggies.
Array.Sort
(which sorts an array in-place) uses an unstable Quicksort.This is the same implementation used internally by
List<T>.Sort
, according to the MSDN documentation:The
Enumerable.OrderBy<TSource, TKey>
method (which sorts a copy of an input sequence) uses a stable Quicksort.As far as I know, these are the only two sorting implementations in the .NET BCL.
MSDN 文档 指出使用的排序算法是快速排序(至少对于arrays) - 这是不可选择或可定制的。
请注意,它不是指定要使用哪种排序方法的 IComparable 接口,它取决于执行排序的方法或类(通常是数组或列表,但也可以是任何方法),例如例如,数组和 列表 完全有可能使用完全不同的算法进行排序(尽管实际上两者都使用快速排序)
这意味着如果您确实愿意,您可以使用替代算法实现您自己的排序方法。
The MSDN Documentation states that the sorting algorithm used is Quicksort (at least for arrays) - This is not selectable or customizable.
Note that its not the
IComparable
interface that specifies what sorting method to use, its down to the method or class that is doing the sorting (normally an array or list, but it could be any method), for example its completely possible for arrays and Lists to sort using completely different algorithms (although in reality both use Quicksort)This means that if you really want to you can implement your own sorting method using an alternative algorithm.