Я хочу создать метод, который проверяет, отсортирован ли массив, с наименьшим целым числом в начале массива и самым большим в конце. Я назвал последовательность массива.
public boolean isSorted(){
int i = 1;
while(i < sequence.length && sequence[i] >= sequence[i-1]){
i++;
}
return i >= sequence.length;
}
Я добрался до этого кода с помощью друга, но я не совсем понимаю его. Что возвращается как логическое? Насколько я понял, прочитав на других сообщениях, он вернет true только тогда, когда i> = sequence.length. Учитывая условия на время, я буду больше или то же, что и sequence.length, только когда массив отсортирован.
Я прав? Извините, если мое форматирование ужасное, я все еще новичок в stackoverflow.
Кажется, что цикл прерывается, как только несоответствие (позиция, в которой доказывается, что массив не сортируется по мере сортировки соседей по отношению к желаемому порядку). Если цикл не прерывается, но заканчивается, точка несоответствия указывает после последнего символа, что означает отсутствие рассогласования.
Возможно, рефакторинг метода таким образом сделает код менее сложным и читаемым:
public boolean isSorted(int[] sequence) {
for (int idx = 1; idx < sequence.length; idx++) {
if (sequence[idx] < sequence[idx-1]) return false;
}
return true;
}
Ты прав. Петля проверяет каждую пару соседних элементов в массиве. Если каждый элемент больше, чем предыдущий, он должен быть отсортирован. Если какая-либо пара не выполняет условие, цикл прерывается немедленно, оставляя i
который меньше, чем sequence.length
, поэтому условие i >= sequence.length
сообщает вам, что весь массив был успешно обработан и должен быть правильно отсортирован.