java - 如何构建一个索引数组,从最高到最低表示不同数组的值?
问题描述
标题可能有点混乱,所以这里有一个例子。我有两个数组:
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 建议了一个很好的解决方案,
另一种方式:假设所有分数的值都是不同的并且是正数,您可以复制数组,对其进行排序,并通过减法知道索引,
在你的例子中:
排序前:
scores = (5,7,10,3,6)
排序后:
scores_sorted = (3,5,6,7,10)
位置的值将遵循以下规则:
if(scores_sorted[i]-scores[j] == 0)
places[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;
}
}
}