按数组值排序数组索引

时间:2015-01-22 18:25:19

标签: c# algorithm sorting

我正在尝试编写一个像这样的数组的函数[4,7,2,1,9] 然后返回另一个像这样的数组

[4,1,0,2,3]// the sorted indices descending for the input array values

我已经尝试过这段代码,但是它运行不正常,我想帮我写一个像这样排序数组的函数,成本最低

 public void solution(int[] D)
 {
    int[] sorted = new int[D.Length];

    for (int i = 0; i < D.Length; i++)
    {
        int ind = 0;

        for (int j = 0; j < D.Length; j++)
        {
            if (D[j] > D[i] ) //&&
            {
                ind = j;
            }
        }
        sorted[i] = ind;
    }
}

1 个答案:

答案 0 :(得分:4)

Array.Sort允许您传递第二个数组:

var data = new[] { 4, 7, 2, 1, 9 };
var indices = new[] { 0, 1, 2, 3, 4 };
Array.Sort( data, indices );

如果您需要按降序排列,请使用Array.Reverse或将IComparer传递给订单:

class ReverseSort : IComparer<int>
{
    public int Compare( int x, int y )
    {
        return y.CompareTo( x );
    }
}

Array.Sort( data, indices, new ReverseSort() );

不幸的是Array.Sort没有一个很好的重载,它需要两个数组+一个像其他重载那样的委托。