Есть две основные проблемы.
Одна из них заключается в том, что вы меняете некоторые элементы дважды.Вы всегда должны убедиться, что i
меньше j
, чтобы numbers[i]
было слева от numbers[j]
.То, как работают ваши циклы, в более поздних итерациях j
начинается ниже i
.Например, когда i
равно 2, внутренние циклы начинаются с j
в 1. Чтобы это исправить, вы всегда можете начать j
с 1 места выше i
:
for(int j = i + 1; j < numbers.length; j++) {
Если выисправить, что вы заметите вторую проблему: массив отсортирован в обратном порядке!Это потому, что сравнение <
обратное.Вы хотите поменять местами, когда левый элемент на больше , чем правый, а не когда он меньше.Если они меньше, они уже в правильном порядке.
if(numbers[i] > numbers[j])