标题可能有点令人困惑,所以这里有一个例子。我有两个数组:
int [] scores;
scores = new int[5]; //(5,7,10,3,6)
int [] places;
places = new int[5]; //(1,2,3,4,5)
我需要以某种方式对第二个数组进行排序(我无法更改第一个数组),因此它代表第一个数组中元素的高度。 10 是最高的,所以它的位置必须是第 1,3 是最低的,所以它的位置必须是第 5。
排序后第二个数组应如下所示:
places = {4,2,1,5,3};
这是我的代码,我需要一些帮助才能使其按应有的方式工作。
do {
for (int i = 0; i < 5; i++) {
for (int j = 1; j < 5; j++) {
if (scores[i] < scores[j]) {
temp = places[i];
places[i] = places[j];
places[j] = temp;
flag = true;
} else {
flag = false;
}
}
}
} while (flag);
提前致谢
最佳答案
@Korashen 建议了一个非常好的解决方案,
另一种方式: 假设所有分数的值都不同且为正数,您可以复制该数组,对其进行排序,并通过减法得知索引,
在您的示例中:
排序前:
分数 = (5,7,10,3,6)
排序后:
scores_sorted = (3,5,6,7,10)
地点的值(value)将遵循以下规则:
if(scores_sorted[i]-scores[j] == 0)
地点[i] = j
完整示例:
int[] scores = new int[]{5, 7, 10, 3, 6};
int[] scores_sorted = scores.clone();
int[] places = new int[]{0,1,2,3,4};
sort(scores_sorted);
for(int i=0;i<5;++i){
for(int j=0;j<5;++j){
if(scores_sorted[i]-scores[j] == 0){
places[i] = j;
}
}
}
关于java - 如何构建一个索引数组来表示不同数组从最高到最低的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58259739/