【问题标题】:Java method to confirm the sorting works [duplicate]确认排序工作的Java方法[重复]
【发布时间】:2021-01-26 06:53:46
【问题描述】:

我有一个包含 100 个整数(从 0 到 99)的数组,并且我实现了一个 Comparable 接口。我现在的任务是确认排序是否有效(即使我知道它确实有效)。我的代码是:

public static boolean confirmSorting(Guppy[] sortedArrayOfGuppies) {
    boolean confirmed = false;
    int maximumID = Integer.MAX_VALUE;
    for (Guppy guppy : sortedArrayOfGuppies) {
        if (guppy.getIdentificationNumber() < maximumID) {
            maximumID = guppy.getIdentificationNumber();
            confirmed = true;
        }
    }
    return confirmed;
}

但即使对于未排序的数组,它也会返回 true。如何确保遍历数组中的每个对象

很遗憾,How to check if array is already sorted 中提出的解决方案不起作用,并非所有 int 都是唯一的(有些是相同的)

【问题讨论】:

  • 它确实遍历了整个数组;问题是当你发现任何比前一个更小的项目时,你设置了confirmed = true,而不是检查它们是否都是。

标签: java sorting comparable


【解决方案1】:

假设它们首先按排序顺序排列。然后,一旦找到不存在的就立即返回。无需在遇到第一次故障时继续检查。这会进行简单的验证,并且不会打印任何信息。如果按升序排序,则返回true,否则返回false。它还假定 id 号是int

public static boolean confirmSorting(Guppy[] sortedArrayOfGuppies) {
    for (int i = 0; i < sortedArrayOfGuppies.length-1; i++) {
        int id1 = sortedArrayOfGuppies[i].getIdentificationNumber();
        int id2 = sortedArrayOfGuppies[i+1].getIdentificationNumber();
        if (id1 > id2) {
            return false;
        }
    }
    return true;
}

请注意,您可能需要传入 comparatorflag,以便验证升序和降序。

【讨论】:

  • 代码与问题代码有相同的 3 个错误: 1) 如果 next大于 目前看到的最高值(这意味着值按升序排列),代码立即返回false,表示值未排序,与应检查的内容完全相反。 --- 2) maximumID 永远不会更新。好吧,除了在返回false 之前,所以没关系。 --- 3) 对于maximumID = Integer.MAX_VALUE,对x &gt; maximumID 的检查永远不会是真的。
  • 我修好了。它可以作为 OP 的示例。
  • 我觉得现在可以了,谢谢
  • 是的,代码现在与重复链接中的答案匹配。