【问题标题】:Sort Array (DONE) and show original index (HALF INCORRECT?)排序数组(DONE)并显示原始索引(HALF INCORRECT?)
【发布时间】:2021-10-02 11:55:10
【问题描述】:

我必须使用排序算法对数组进行排序,并显示这些值最初放置在哪个索引中。 (查看预期结果与实际结果:https://i.imgur.com/GpIpkPE.png)。

我设法对值进行了正确排序。但是索引是正确的?这让我很困惑。

    public static void sortNumbers(double[] averageNotes) {

        for (int i = 0; i < averageNotes.length; i++) {
            double max = averageNotes[i];
            int maxId = i;

            for (int j = i+1; j < averageNotes.length; j++) {
                if (averageNotes[j] > max) {
                    max = averageNotes[j];
                    maxId = j;

                }
            }
            double temp = averageNotes[i];
            averageNotes[i] = max;
            averageNotes[maxId] = temp;
            System.out.println(averageNotes[i] + " (" + maxId + ")");
        }

非常感谢任何帮助。谢谢。

【问题讨论】:

  • 你有什么限制吗?您可以创建相同大小的“int”数组,其中 value = index 以镜像排序操作吗?
  • 正如我所见,当您将 i 元素与 j 交换时,您不会存储 i 的初始位置。试试这个:[1.2,1.3,1.4,1.0]
  • @TimurEfimov 我不能使用 Array.sort,我必须使用排序算法(就像我刚刚做的那样)。我可以使用基本的 java 来解决这个问题。是的,你提议的应该没问题。

标签: java arrays sorting


【解决方案1】:

为您的索引使用一个额外的数组并同时排序:

public static void sortNumbers(double[] averageNotes) {
    //create an array for your indices
    int[] indices = new int[averageNotes.length];

    //fill indices
    for (int i = 0; i < averageNotes.length; i++) {
        indices[i] = i;
    }

    //sort both arrays simultaneously
    for (int i = 0; i < averageNotes.length; i++) {
        for (int j = i+1; j < averageNotes.length; j++) {
            if (averageNotes[i] < averageNotes[j]) {
                double temp = averageNotes[i];
                averageNotes[i] = averageNotes[j];
                averageNotes[j] = temp;
                
                int t = indices[i];
                indices[i] = indices[j];
                indices[j] = t;
            }
        }
    }

    //print
    for (int i = 0; i < averageNotes.length; i++) {
        System.out.println(averageNotes[i] + " (" + indices[i] + ")");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    相关资源
    最近更新 更多