.NET框架实现了什么排序算法

Max*_*ich 11 c# sorting collections icomparable

任何人都可以建议在实现.NET中的IComparable之类的东西时,.NET使用什么排序算法来实际排序底层数据?也可以使用可自定义或可选择的算法?

Dan*_*Tao 17

有两个大人物.

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

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

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

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

据我所知,这些是.NET BCL中唯一的两个排序实现.

  • 只是一个FYI ......取决于它对Array.Sort和List <T>的排序.Sort将选择3种算法中的一种,插入排序,堆栈和快速排序.如果条件对其他两个条件不是最好的话,快速排序就是后备.有关详细信息,请参阅Array.Sort的MSDN文档文档. (2认同)

Jus*_*tin 5

MSDN文档指出所使用的排序算法是快速排序(至少对于阵列) -这是不可选或可定制的.

请注意,它不是IComparable指定要使用的排序方法的接口,而是指向正在进行排序的方法或类(通常是数组或列表,但它可以是任何方法),例如它完全可以用于数组和列表使用完全不同的算法排序(虽然实际上都使用Quicksort)

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