Java: логика сортировки выбором

Я печатаю элементы Sorted Array, используя сортировку выбором. Но я получаю элементы входного массива в качестве вывода в той же последовательности без сортировки.

public class SelectionSort {
        public static void main(String[] args) {

        int[] arr= {1,9,3,0,7};
        int n=arr.length;
        for(int i=0; i<n-1; i++)
        {
            int minimumIndex = i;
            for(int j=i; j<n; j++)
            {
                if(arr[j]<arr[minimumIndex])
                {
                    minimumIndex=j;
                }
            }
            int temp=arr[i];
            arr[i]=arr[minimumIndex];
            arr[i]=temp;
        }

        for(int e: arr)
        {
            System.out.print(e+" ");
        }
    }
}

Ожидаемый выход: 0 1 3 7 9 Фактический выход: 1 9 3 0 7


person Laxmikant    schedule 29.09.2019    source источник
comment
Ваш код для переключения двух элементов массива неверен. Посмотрите на это немного больше.   -  person Tom    schedule 29.09.2019


Ответы (2)


В коде вашего метода фактическая проблема заключается в замене элементов,

Последовательность должна быть такой, как показано ниже,

int temp=arr[minimumIndex];  
arr[minimumIndex]=arr[i];
arr[i] =temp;

вместо

 int temp=arr[i];
 arr[i]=arr[minimumIndex];
 arr[i]=temp;
person PJain    schedule 29.09.2019

Я вижу две проблемы. Одним из них является то, как вы обмениваете предметы. Вам нужно заменить пункт, где вы нашли минимальный индекс. Кроме того, ваш индекс J должен начинаться на единицу после вашего индекса I. Вы можете предположить, что тот, что перед ним, является самым маленьким, когда вы выполняете цикл. Я изменил несколько частей кода и протестировал его, и он отлично работает для меня.

        for (int i = 0; i < arr.length - 1; i++)
        {
            int minimumIndex = i;

            for (int j = i + 1; j < arr.length; j++)
            {
                if (arr[j] < arr[minimumIndex])
                {
                    minimumIndex = j;
                }
            }

            int temp = arr[i];
            arr[i] = arr[minimumIndex];
            arr[minimumIndex] = temp;
        }
person Christian Ore    schedule 29.09.2019