我正在尝试编写一个接受数组的函数 [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;
}
}
最佳答案
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
没有像其他重载那样采用两个数组 + 委托(delegate)的漂亮重载。
关于c# - 按数组值排序数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28096070/