2011-05-11 67 views
7
实现在.NET类似IComparable的什么排序算法并使用.NET实际的基础数据进行排序时

谁能请指教?也是使用可自定义或可选择的算法?什么排序算法并在.NET框架实现

+0

http://stackoverflow.com/questions/204805/which-sorting-algorithm-is-used-by-net-in-icomparer或http://stackoverflow.com/questions/1854604/which-sorting-algorithm - 二手-在净数组排序法阵排序 我很惊讶的“新问题”对话框并没有表现出相似的问题,当你进入这一个。我不惊讶有人在询问之前没有进行搜索。 – 2011-05-11 03:24:35

+0

[这种情况已经改变(https://msdn.microsoft.com/en-us/library/6tf1f0bc(V = VS.100)的.aspx),因为.NET 4.5:现在插入排序对于n <16,以其他方式与开始当分区数量(递归深度?)超过2 * Log^N时,快速排序并切换到Heapsort。调用:[Introsort](https://en.wikipedia.org/wiki/Introsort) – Laoujin 2015-08-06 23:38:52

回答

14

有两大因素。

Array.Sort(其排序就地阵列)使用unstableQuicksort

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

该方法使用Array.Sort,其 使用快速排序算法。

Enumerable.OrderBy<TSource, TKey>方法(该方法进行排序的输入序列的拷贝)使用稳定快速排序

据我所知,这些都是在.NET BCL仅有的两个排序实现。

4

MSDN Documentation状态,所使用的排序算法是快速排序(至少对于阵列) - 这是不可选或可定制的。

注意,它不是IComparable接口,以指定排序方法使用,其向下的方法或类是做排序(通常的阵列或列表,但它可以是任何方法),例如其完全可能的阵列和Lists使用完全不同的算法(虽然在现实中都使用快速排序)

这意味着,如果你真的想你可以使用另一种算法实现自己的排序方法排序。