首页 > 解决方案 > 如何构建一个索引数组,从最高到最低表示不同数组的值?

问题描述

标题可能有点混乱,所以这里有一个例子。我有两个数组:

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);

提前致谢

标签: javaarrayssorting

解决方案


@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;
          }
     }
}

推荐阅读