Почему этот простой метод сортировки массива в Java не ведет себя нормально при изменении инициализации? - PullRequest
0 голосов
/ 20 июня 2019

Я посмотрел этот метод сортировки массива, и меня смущает одна вещь при изменении начальной инициализации цикла 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) идентичны.

1 Ответ

1 голос
/ 20 июня 2019

Поскольку (2) for (int i = 0; i < list.length-1; i++) просто игнорирует элемент list.length-1 входного массива. Он никогда не обрабатывается, поэтому он всегда будет оставаться на последней позиции в исходном массиве.

Циклы (1) и (3) не идентичны, поскольку (1) for (int i = 0; i <= list.length-1; i++) обработает последний элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...