对于我的程序,我需要声明2个数组。其中一个ids和另一个得分。每个id都有一个相应的分数。我需要将得分从最高到最低排序,并将其打印在得分ID旁边的表格中。我知道如何排序分数没问题。但我不确定如何让数组中的id以与分数相同的顺序进行更改。例如,分数312在分类之前处于索引4中。并且id 928在索引4中。在排序312现在在索引13中但其对应的id仍然在索引4中。我将如何能够修复它?
编辑:我不想使用2个数组,但我担心这是一个要求
答案 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;
}