【问题标题】:Index of each element after sorting排序后每个元素的索引
【发布时间】:2015-09-16 18:51:13
【问题描述】:

如果我们有元素数组,那么在对该数组进行排序后计算每个元素的索引的有效方法是什么?有什么方法可以有效地重用c++java 中的sort 函数?

例如:

double[] array=[".2",".6",".3",".5",".1"];

我想要这样的东西:

         ans=  [  1,   4,   2,   3,   0 ];

这是因为在排序后.2 放入索引1.6 放入索引4.3 放入索引2 等等。

【问题讨论】:

  • 这是一个不同的问题。我需要知道排序后每个元素的索引,但是这些算法提供了原始数组中每个元素的索引。
  • 排序前需要封装每个元素的原始索引,以便排序后访问。
  • 这无济于事,因为在排序后想要通过O(1)访问元素的排名。我不想每次都搜索元素。

标签: java sorting ranking


【解决方案1】:

这将完成您在O(n log n) 中寻找的内容,很可能有更好的方法:

double[] arr = {0.2, 0.6, 0.3, 0.5, 0.1};
Integer[] intermediateIndices = new Integer[arr.length];
Integer[] finalIndices = new Integer[arr.length];
for (int i = 0; i < arr.length; i++) {
  intermediateIndices[i] = i;
  finalIndices[i] = i;
}

Arrays.sort(intermediateIndices, new Comparator<Integer>() {
  @Override
  public int compare(Integer o1, Integer o2) {
    return Double.compare(arr[o1], arr[o2]);
  }
});

Arrays.sort(finalIndices, new Comparator<Integer>() {
  @Override
  public int compare(Integer o1, Integer o2) {
    return intermediateIndices[o1] - intermediateIndices[o2];
  }
});

System.out.println(Arrays.toString(intermediateIndices));
System.out.println(Arrays.toString(finalIndices));

// [4, 0, 2, 3, 1]
// [1, 4, 2, 3, 0]

【讨论】:

    猜你喜欢
    • 2013-10-29
    • 2022-01-07
    • 2016-07-14
    • 2014-03-10
    • 2013-01-04
    • 1970-01-01
    • 2021-03-04
    • 2010-12-28
    • 2013-03-25
    相关资源
    最近更新 更多