Я посмотрел этот метод сортировки массива, и меня смущает одна вещь при изменении начальной инициализации цикла for.
Исходный цикл for был инициализирован значением 1
(1) для (int i = 1; i
Затем я решил инициализировать его значением 0, поэтому я корректировал list.length в операторе if соответственновычитая 1.
(2) для (int i = 0; i
Вот полный метод сортировки: -
public static void sortList(int[] list) {
int temp;
for (int i = 1; i < list.length; i++) {
for (int j = i; j > 0; j--) {
if (list[j] < list[j - 1]) {
temp = list[j];
list[j] = list[j - 1];
list[j - 1] = temp;
}
}
}
}
Исходные четыре цикла, упомянутые в приведенном выше коде, правильно сортируют следующий массив [5, 3, 10, 8] по [3, 5, 8, 10]
Но мои результаты настройкив следующем: [3, 5, 10, 8].
Почему оригинальная четырехконтурная схема работает, а моя - нет?Разве оба цикла не должны запускаться 3 раза?
Позже я исправил свою проблему, добавив оператор равенства меньше
(3) для (int i = 0); i <= list.length-1; i ++) </p>
Но я не понимаю , почему это работает сейчас.Этот новый четырехтактный цикл теперь выполняется 4 раза в отличие от того, как он запускается 3 раза в исходном, и оба удалось отсортировать массив.
Мой вопрос прост, и его ответ почти наверняка тоже прост, ноЯ слишком новичок, чтобы понять это сам.
Почему эти две работы работают: -
(1) для (int i = 0; i <= list.length-1; i ++) </p>
(2) для (int i = 1; i
Но не этот: -
(3) для (int i = 0; i
Несмотря на то, что четыре цикла (1) и (3) идентичны.