Array.Sort()使用的是快速排序+堆排序,我在网上找到的几个C#实现的泛型QuickSort()函数都比内置的Array.Sort()慢很多。(其中我找到最快的实现是:https://blog.csdn.net/sarono/article/details/83876260)
我又在https://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs上面直接Copy了Array.Sort()的源码到我的项目中做比较,发现当这个内置函数变成自定义函数之后,它慢得更离谱
以下在vs2019的release模式下测试的1kw个<int>类型数据排序的结果:
三个函数都是泛型版本的
第一个是一般的自定义函数的QuickSort,
第二个是直接复制的C#Array.Sort()的源码作为自定义函数,
第三个是直接调用C#内置Array.Sort()
显然前两个都不如最后的快,更离谱的是第二个居然比第一个更慢了。第二个和第三个明明是同一源码
虽然泛型数据的比较要调用CompareTo()函数,相比更慢。但在大家都是泛型实现的情况下,为什么还会造成这种速度上的差距?为什么内置的Array.Sort()这么快呢?