对数组进行排序,但按排序顺序更改其相应数组的列表

时间:2018-02-19 16:32:37

标签: java arrays sorting

对于我的程序,我需要声明2个数组。其中一个ids和另一个得分。每个id都有一个相应的分数。我需要将得分从最高到最低排序,并将其打印在得分ID旁边的表格中。我知道如何排序分数没问题。但我不确定如何让数组中的id以与分数相同的顺序进行更改。例如,分数312在分类之前处于索引4中。并且id 928在索引4中。在排序312现在在索引13中但其对应的id仍然在索引4中。我将如何能够修复它?

编辑:我不想使用2个数组,但我担心这是一个要求

4 个答案:

答案 0 :(得分:1)

创建一个实现Comparable的值对象类。将它们放在SortedSet的实现中。

答案 1 :(得分:0)

如果赋值强制执行两个数组,那么您需要:

1)手动排序一个数组,当你根据搜索算法在第一个数组中切换元素时,你也可以切换第二个数组中的相应元素,或者

2)创建两个数组的第i个元素之间关联的映射,并在排序第一个数组后使用map重新创建第二个数组。请注意,仅当排序数组中的元素是唯一的时才有效。

答案 2 :(得分:0)

使用相同的索引同时对它们进行排序。这是一个臭名昭着的泡泡分类的例子:

int [] score = {5, 3, 6, 1, 2};
int [] id = {1, 2, 3, 4, 5};
for (int i = 0; i < id.length; i++)
{
     for (int j = 0; j < id.length-i-1; j++) 
     {
         if (score[j] < score[j+1])
         {
             int temp = score[j];
             score[j] = score[j+1];
             score[j+1] = temp;

             temp = id[j];
             id[j] = id[j+1];
             id[j+1] = temp;
         }
     }
}

答案 3 :(得分:0)

简单的方法是使用插入排序,但效率不高,因为它的复杂性是二次的(N * N):

...
int[] ids = {4, 8, 5};
int[] values = {15, 30, 2};

for(int i = 1; i < values.length; i++) {
  for(int k = 0; k < i; k++) {
    if (values[k] > values[i]) {
      swapElements(values, k, i);
      swapElements(ids, k, i);
    }
  }
}
...
private static void swapElements(int[] array, int index1, int index2) {
  int temp = array[index1];
  array[index1] = array[index2];
  array[index2] = temp;
}