c#结构数组排序

本文关键字:数组排序 结构 | 更新日期: 2023-09-27 18:01:37

我正在运行一个模拟部分,其中需要一组值对数组。当我使用Array.Sort(v1,v2)时,它基于first对2个数组进行排序,所有模拟大约需要9毫秒。但我需要先排序然后再排序所以我创建了structs数组。请看下面的代码

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);
}

现在大约需要27ms。有更好的排序方法吗?

c#结构数组排序

既然你要极大地优化它,请考虑如下:

  1. 数组。Sort在数组上运行并执行比较。在你的例子中,因为你在结构上实现了一个接口,所以不会有拆箱。

  2. 数组。Sort在排序时执行元素交换。交换是一种内部记忆。你的结构至少需要16个字节。您可以尝试通过在类中分配双精度值来减少影响。类总是占用IntPtr。大小字节(因为你将存储指针),所以它应该复制更少的字节。