.NET的Array.Sort()
方法使用哪种排序算法?
答案 0 :(得分:19)
Array.Sort()
选择三种排序算法中的一种,具体取决于输入的大小:
2 * log^N
,其中N
是输入数组的范围,则使用堆排序算法。答案 1 :(得分:4)
答案 2 :(得分:1)
如上所述快速排序。但它并不适用于所有数据!
通过使用反射器:它在本机dll中进行排序 - >对于一维数组最常见的情况,升序。但是,其他情况在托管代码中排序 - 应用的优化很少。因此他们的速度通常要慢得多。
答案 3 :(得分:1)
实际上,它看起来并不那么容易。看起来.NET正在根据输入和他的大小实现一组不同的排序算法。我曾经从CLR反编译Array.Sort()
,似乎他们正在使用Heap,Insertion和Quicksort。
答案 4 :(得分:0)
来自MSDN
的更多笔记此方法将内省排序(introsort)算法用作 如下:
如果分区大小少于16个元素,则使用插入 排序算法。
如果分区数超过2 * LogN ,其中N是 输入数组,它使用 Heapsort算法。
否则,它使用 Quicksort 算法。
此实现执行不稳定的排序;也就是说,如果两个 元素相等,则可能不会保留其顺序。相比之下, 稳定排序会保留元素相等的顺序。
对于使用Heapsort和Quicksort排序的数组 算法,在最坏的情况下,该方法是O(n log n)操作, 其中n是长度。
呼叫者注意事项.NET Framework 4和更早版本仅使用 Quicksort算法。 Quicksort识别中的无效比较器 在某些情况下,排序操作会引发 IndexOutOfRangeException异常,并引发ArgumentException 呼叫者的例外。从.NET Framework 4.5开始,它是 可能以前进行的排序操作 ArgumentException不会引发异常,因为插入 sort和heapsort算法不会检测到无效的比较器。对于 在大多数情况下,这适用于元素少于16个的数组。
答案 5 :(得分:-1)