相关疑难解决方法(0)

以降序排序数组的最快方法

为什么是以下代码

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)

代码在调试器外部的发布模式下运行.

为阵列生成降序排序的最有效方法是什么,最好是在一个班轮中?

c# sorting

18
推荐指数
1
解决办法
2万
查看次数

为什么List <T> .Sort使用Comparer <int> .Default的速度是等效自定义比较器的两倍多?

结果

使用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:771ms
  • 使用public int Compare(int x, int y) { return x.CompareTo(y); }:809ms

评论

Comparer<int>.Default返回一个GenericComparer<int>.根据dotPeek,我们有:

internal class GenericComparer<T> : Comparer<T> where T : IComparable<T>
{
  public …
Run Code Online (Sandbox Code Playgroud)

c# sorting performance

15
推荐指数
1
解决办法
4370
查看次数

标签 统计

c# ×2

sorting ×2

performance ×1