2

代替冒泡排序,可以使用哪种排序技术对整数数组进行排序,以便在输出时我可以显示其在原始数组中的位置?

输入 4 5 3 6 1

输出

   INDEX : VALUE
     5   :   1
     3   :   3
     1   :   4
     2   :   5
     4   :   6
4

2 回答 2

5

您可以使用TreeMap其中键是数组中的值,值是索引 + 1。它会自动执行您需要的操作。

示例代码:

public static void main(String[] args) throws ParseException {
    int[] array = new int[] {4, 5, 3, 6, 1};
    Map<Integer, Integer> sortedMap = new TreeMap<Integer, Integer>();

    for (int i = 0; i < array.length; i++) {
       sortedMap.put(array[i], i + 1);
    }
    System.out.println(sortedMap);
}

输出:

{1=5, 3=3, 4=1, 5=2, 6=4}

注意:这仅在原始列表中没有重复项时才有效

于 2012-07-02T14:18:39.697 回答
1

使用持有人对象的解决方案:

public class IntWithIndex implements Comparable<IntWithIndex>
{
  public final Integer value;
  public final int index;

  public IntWithIndex(int value, int index) { 
    this.value = value; 
    this.index = index; 
  }

  public int compareTo(IntWithIndex other) { 
    return this.value.compareTo(other.value); 
  }
  public String toString() { 
    return String.format("[%d,%d]", value, index); 
  }

  public static void main(String[] args) {
    final IntWithIndex[] ts = new IntWithIndex[5];
    int i = 0;
    for (int x : new int[] { 4, 5, 3, 6, 1 }) 
      ts[i] = new IntWithIndex(x, i++);
    Arrays.sort(ts);
    System.out.println(Arrays.toString(ts));
  }
}
于 2012-07-02T14:26:02.700 回答