为什么是以下代码
Array.Sort(values);
Array.Reverse(values);
Run Code Online (Sandbox Code Playgroud)
与以下相比,按降序排序数组的速度要快得多
Array.Sort(values, (a,b)=>(-a.CompareTo(b)));
Run Code Online (Sandbox Code Playgroud)
代码在调试器外部的发布模式下运行.
为阵列生成降序排序的最有效方法是什么,最好是在一个班轮中?
使用1000万随机ints 的列表(每次相同的种子,平均10次重复):
listCopy.Sort(Comparer<int>.Default)需要314ms.
运用
sealed class IntComparer : IComparer<int>
{
public int Compare(int x, int y)
{
return x < y ? -1 : (x == y ? 0 : 1);
}
}
Run Code Online (Sandbox Code Playgroud)
listCopy.Sort(new IntComparer())需要716毫秒.
一些变化:
struct IntComparer而不是sealed class:771mspublic int Compare(int x, int y) { return x.CompareTo(y); }:809msComparer<int>.Default返回一个GenericComparer<int>.根据dotPeek,我们有:
internal class GenericComparer<T> : Comparer<T> where T : IComparable<T>
{
public …Run Code Online (Sandbox Code Playgroud)