繁体   English   中英

找到已排序数组的原始索引

[英]Find the original index of sorted array

假设我有一个这样的String数组

String [] item={"B","C","D","A"};

这意味着

item[0]=B

item[1]=C

item[2]=D

item[3]=A

现在我已对此数组进行了排序并得到了类似

item[0]=A

item[1]=B

item[2]=C

item[3]=D

我想知道元素C的原始索引(这里是1)。 如何使用代码找到它? 可能是我的问题不明确,请问我一些你不明白的事。

除非您保存一些附加数据,否则不能。 您可以将索引和值放在一个类中并按值排序,或者您可以定义一个包含索引的数组并对该数组进行排序:

Integer[] indices = new Integer[item.length];
for (int i = 0; i < indices.length; i++) {
    indices[i] = i;
}

Arrays.sort(indices, new Comparator<Integer>() {

    public int compare(Integer i1, Integer i2) {
        return item[i1].compareTo(item[i2]);
    }
});

排序值:

item[indices[0]]
item[indices[1]]
item[indices[2]]
item[indices[3]]

原始指数

indices[0]
indices[1]
indices[2]
indices[3]

对数组进行排序后。 你怎么能追踪你原来的位置?

我想到了3个选项:

  1. 保存您在排序过程中执行的所有交换
  2. 保存矢量的原始副本
  3. 使用可以保存实际位置和原始位置的结构。

在对数组进行排序之前,请使用映射来存储数组元素的原始索引,如下所示。

String[] item = { "B", "C", "D", "A" };
Map<String, Integer> map = new HashMap<String, Integer>();
for (int i = 0; i < item.length; i++) {
    map.put(item[i], i);
}

当你需要你打电话如下

map.get("A"); // here return the original index of "A"

回顾一下:你有两个数组, unsortedArraysortedArray 对于sortedArray的每个元素,您希望在unsortedArray中检索相应的索引。

public int getCorrespondingIndex(String[] unsortedArray, String[] sortedArray, int index){
   for(int i=0; i<unsortedArray.length; i++)
     if(sortedArray[index].equals(unsortedAray[i])
       return i;
   return -1;
}

public static void main(String args[]){
  int oldIndex;
  String[] unsortedArray = {"B","C","D","A"};
  String[] sortedArray= {"A", "B", "C", "D"};
  for(i=0; i<sortedArray.length; i++){
    oldIndex = getCorrespondingIndex(unsortedArray, sortedArray, i);
    System.out.println("The element "+sortedArray[i]+" was in position "+oldIndex);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM