.NET的Array.Sort()方法使用哪种排序算法?

Man*_*eja 16 .net c# sorting algorithm

.NET的Array.Sort()方法使用哪种排序算法?

Bad*_*mar 23

Array.Sort() 选择三种排序算法之一,具体取决于输入的大小:

  1. 如果大小少于16个元素,则使用插入排序算法.
  2. 如果大小超过2 * log^N,N输入数组的范围在哪里,它使用堆排序算法.
  3. 否则,它使用Quicksort算法

源:MSDN上的Array.Sort(Array)方法.

  • 您需要重新阅读该主题。特别是,您的第 2 项不正确。它不是基于输入的大小做出决定,而是基于 * 分区数。* `Array.Sort` 实现了 Introsort,它旨在在大多数情况下使用快速排序(增加了使用插入排序的优化)对于小分区),但如果它检测到项目排序导致快速排序的病理情况,它会更改为堆排序。 (3认同)

Sta*_*mov 5

事实上,事情并不像看起来那么容易。看起来.NET 正在根据输入和他的大小实现一组不同的排序算法。我曾经Array.Sort() 从 CLR反编译,似乎他们同时使用了堆、插入和快速排序。在此处输入图片说明

  • ...因为这里有清楚的记录 https://msdn.microsoft.com/en-us/library/6tf1f0bc.aspx (3认同)

CMS*_*CMS 4

它使用快速排序算法。

来源:

  • 实际上,它根据输入数组的长度使用三种变体,如 @badgujar 所描述的。(因此我投了反对票,因为你的答案(不再)正确,至少对于 .NET 4.5/4.6 来说不是) (5认同)
  • .Net框架从4.5版本开始使用Introsort代替简单的快速排序。http://en.wikipedia.org/wiki/Introsort (2认同)