java - 如何构建一个索引数组来表示不同数组从最高到最低的值?

标签 java arrays sorting

标题可能有点令人困惑,所以这里有一个例子。我有两个数组:

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/

相关文章:

java - 构建仅包含 Maven 依赖类的 jar 文件

Java - 如何在 Java Web Start 中获取权限

JavaScript 数组中的负元素

javascript - 按最接近已发生和将要发生的日期排序

JavaScript 排序帮助

python - 如何将 '1,1'形式的字符串转换为float(1,1)?

java - 将值作为对象获取如何将其转换为字符串并检索其值

java - 你如何在 Java 中设计一个好的 permgen 空间字符串?

java - 给定一个数字数组,任务是仅打印那些只有 1、2 和 3 作为数字的数字

java - 如何声明和实例化一个新的通用数组?