Отладка неисправностей Метод SelectionSort - PullRequest
0 голосов
/ 26 ноября 2018

Итак, я заметил, когда я тестирую этот код:

public class SelectionSort{

    public static void sorted(int[] array){

        for (int i = 0; i < array.length - 1; i++) {
            int key = array[i];
            int index = i;

            for (int j = 0; j < array.length; j++) {
                if (array[j] < array[i]) {
                key = array[j];
                index = j;
                }
            }

            int temp = array[i];
            array[i] = array[index];
            array[index] = temp;
        }
    }

    //test function
    public static void main(String[] args) {
        int[] array = new int[]{4,3,6,7,1};
        sorted(array);

        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        } 
    }
}

Я получаю вывод: {3,1,4,6,7}, который явно не отсортирован.Но когда я изменяю счетчик внутреннего цикла с for(int j = 0; j < array.length; j++) на for(int j = 1; j < array.length; j++), я получаю правильный результат {1,3,4,6,7}.Любопытно, почему это происходит логически.

1 Ответ

0 голосов
/ 26 ноября 2018

Основная идея заключается в том, что из одной итерации внешнего цикла максимальный элемент в массиве будет перенесен в конец массива.

Таким образом, со следующей итерации вы можете пропустить последний элементвне массива

for (int j = 0; j < array.length  - i; j++)

Но вы должны продолжать проверять первый элемент с его ближайшим.

...