C#排序结构数组

时间:2015-07-08 08:38:08

标签: c# algorithm sorting

我正在运行一个模拟部分,需要一系列值的数组。 当我使用Array.Sort(v1,v2)时,它基于第一个排序2个阵列,所有模拟大约需要9毫秒。 但我需要先根据第二个排序,所以我创建了一系列结构。请参阅下面的代码。

private struct ValueWithWeight : IComparable<ValueWithWeight>
{
    public double Value;
    public double Weight;
    public int CompareTo(ValueWithWeight other)
    {
        int cmp = this.Value.CompareTo(other.Value);
        if (cmp != 0)
            return cmp;
        else
            return this.Weight.CompareTo(other.Weight);
    }
} 

void Usage() 
{
    ValueWithWeight[] data = FillData();
    Array.Sort(data);
}

现在需要大约27毫秒。有没有更好的排序方式?

1 个答案:

答案 0 :(得分:0)

由于您要对其进行极为优化,请考虑以下事项:

  1. Array.Sort在您的阵列上运行并执行比较。在您的情况下,由于您在结构上实现了接口,因此不会取消装箱。

  2. Array.Sort在排序时执行元素交换。交换是内部memmove。您的结构至少需要16个字节。您可以尝试通过在课堂中分配双倍值来减少影响。类将始终占用IntPtr.Size字节(因为您将存储指针),因此它应该复制更少的字节。