java - 将数组的值从 1 排序到 10,java?

标签 java arrays sorting

我正在尝试将一个数组的值排列到另一个数组中。 所以array1, values(e.g. array1[3]) 需要根据值的大小进行排序,然后需要分配一个从1到1的值10 取决于数量的大小。排名在 1 到 10 之间。

我试过做选择排序:

public static int[] doSelectionSort(int[] arr){

for (int i = 1; i < arr.length; i++)
{
    int index = i;
    for (int j = i + 1; j < arr.length - 1; j++)
        if (arr[j] < arr[index])
            index = j;

    int smallerNumber = arr[index]; 
    arr[index] = arr[i];
    arr[i] = smallerNumber;

}

除此之外,我不知道该去哪里。我尝试了 2d 数组,但这很令人困惑。 array1 将显示在 GUI 屏幕的一列中,但根据程序以随机​​顺序显示。但是排名将显示在 GUI 中 array1 列的每个值旁边。排名不需要按顺序显示,但需要对 array1 值进行排名,并显示在屏幕下一列的值旁边。

最佳答案

解决此类问题的一种方法:

  • (value, index) 对存储在一个数组中
  • 对数组排序
  • 根据已排序的对数组构建等级数组

像这样:

public static int[] calculateRanks(int... arr) {
    class Pair {
        final int value;
        final int index;

        Pair(int value, int index) {
            this.value = value;
            this.index = index;
        }
    }

    Pair[] pairs = new Pair[arr.length];
    for (int index = 0; index < arr.length; ++index) {
        pairs[index] = new Pair(arr[index], index);
    }

    Arrays.sort(pairs, (o1, o2) -> -Integer.compare(o1.value, o2.value));

    int[] ranks = new int[arr.length];
    int rank = 1;
    for (Pair pair : pairs) {
        ranks[pair.index] = rank++;
    }

    return ranks;
}

这假设值是唯一的,因此排名也将是唯一的。 如果可能存在重复值,您可以相应地调整设置排名的最后一步。

例如,如果数组中至少有一个值, 这样的事情会起作用:

    int[] ranks = new int[arr.length];
    ranks[pairs[0].index] = 1;
    for (int i = 1; i < pairs.length; ++i) {
        if (pairs[i].value == pairs[i - 1].value) {
            ranks[pairs[i].index] = ranks[pairs[i - 1].index];
        } else {
            ranks[pairs[i].index] = i + 1;
        }
    }

关于java - 将数组的值从 1 排序到 10,java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36115069/

相关文章:

java - 为什么在 Java 中更喜欢使用列表而不是数组?

python - 如何对字符串列表中的每个单独的字符串进行排序?

android - 如何按降序对 ListView 项目进行排序

java - 如何在 iText 中添加无边框表格

java - 在 Java 中修补对象更新属性的智能方法

java - 如何避免java中字符串数组中的空值?

arrays - 快速索引越界

c# - 排序只工作一次

java - Thread.getStackTrace() 是线程安全的吗?

java - 为什么 AsyncTask 在添加新数据后不自动更新 GraphView?