Метод Java для подтверждения работы сортировки

У меня есть массив из 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 даже для несортированных массивов. Как убедиться, что выполняется итерация по каждому объекту в моем массиве?

К сожалению, решение, предложенное в разделе Как проверить, отсортирован ли массив не работает, не все целые числа уникальны (некоторые одинаковые)


person feedthemachine    schedule 11.10.2020    source источник
comment
Он перебирает весь массив; проблема в том, что вы устанавливаете confirmed = true, когда находите любой элемент, который меньше предыдущего, вместо того, чтобы проверять, что они все такие.   -  person kaya3    schedule 12.10.2020


Ответы (1)


Предположим, что они отсортированы в первую очередь. Затем вернитесь, как только вы найдете те, которые не являются. Нет необходимости продолжать проверку при обнаружении первого сбоя. Это делает простую проверку и не печатает никакой информации. Он возвращает true, если отсортировано в порядке возрастания, и false в противном случае. Также предполагается, что идентификационный номер — 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;
}

Обратите внимание, что вы можете передать comparator или flag, чтобы вы могли проверить сортировку как по возрастанию, так и по убыванию.

person WJS    schedule 11.10.2020
comment
В коде есть те же 3 ошибки, что и в коде вопроса: 1) Если значение следующее больше, чем самое высокое значение, наблюдаемое до сих пор (что означает, что значения расположены в порядке возрастания), код немедленно возвращает false, указывающий, что значения не отсортированы, что является полной противоположностью тому, что предположительно проверяется. --- 2) maximumID никогда не обновляется. Ну, кроме как перед возвратом false, так что это не имеет значения. --- 3) С maximumID = Integer.MAX_VALUE проверка на x > maximumID никогда не может быть истинной. - person Andreas; 12.10.2020
comment
Я починил это. Это может служить примером для ОП. - person WJS; 12.10.2020
comment
Я думаю, теперь это работает, спасибо - person feedthemachine; 12.10.2020
comment
Да, код теперь соответствует ответам в повторяющихся ссылках. - person Andreas; 12.10.2020