【发布时间】:2010-09-17 07:35:13
【问题描述】:
当我们在我们的类中实现IComparer 时,有谁知道.net 使用哪种排序算法?
【问题讨论】:
-
This has changed 从 .NET 4.5 开始:现在对 nIntrosort
-
@Laoujin 以及
Enumerable.OrderBy使用的算法是什么?
当我们在我们的类中实现IComparer 时,有谁知道.net 使用哪种排序算法?
【问题讨论】:
Enumerable.OrderBy使用的算法是什么?
QuickSort好像是它。
IComparer 上的文档说
此接口与Array.Sort 和Array.BinarySearch 方法结合使用。
Array.Sort 文档说
此方法使用快速排序算法。此实现执行不稳定的排序;也就是说,如果两个元素相等,则可能不会保留它们的顺序。相比之下,稳定排序会保留相等元素的顺序。
【讨论】:
current documentation 表示它使用一种 Introsort,一种混合排序算法:
是这样的:
如果分区大小少于 16 个元素,则使用 插入排序算法
如果分区数超过2 * LogN,其中N为范围 对于输入数组,它使用 Heapsort 算法。
否则,它使用快速排序算法。
【讨论】:
根据MSDN,.NET 使用 QuickSort。顺便说一句,该方法绝对不依赖于比较器(只要它是基于比较的),那么.NET 为什么要根据您是否提供自定义比较器来使用不同的方法?
【讨论】: