c# - 按数组值排序数组索引

标签 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;
    }
}

最佳答案

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/

相关文章:

javascript - 客户端按键处理事件、设置焦点函数和 __doPostBack ASP.NET

c# - 使用 SSO/OpenID Connect 的 UWP 应用程序的回调 uri 是什么?

algorithm - 从 int 和余数中找到作为 float 的平方根?

algorithm - 在剪枝和搜索算法中选择 "P"

c# - 下载动态文件

c# - Unicode @font-face 文本在 FF 中工作,而不在 Chrome 和 IE 中工作

algorithm - 连接线段中的点

c - 我想知道它是如何工作的

algorithm - 运行时空复杂度修改后的归并排序

php - 如何获取数组中同一键的最大值