Java: логика сортировки выбора - PullRequest
0 голосов
/ 29 сентября 2019

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

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+" ");
        }
    }
}

Ожидаемое o / p: 0 1 3 7 9 Фактическое o / p: 1 9 3 0 7

Ответы [ 2 ]

0 голосов
/ 29 сентября 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;
        }
0 голосов
/ 29 сентября 2019

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

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

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

вместо

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