Это правильный способ сделать сортировку выбора - PullRequest
0 голосов
/ 07 ноября 2019

Я написал этот код на моем базовом понимании сортировки выбора, но он сортирует только первый и последний элемент моего массива. Что я делаю не так?

public static int[] selectionSort(int[] a) {

    for(int i = 0; i < a.length-1; i++) {
        int min = i;
        for(int j = i; i< a.length-1; i++) {
           if(a[min] > a[j]) {
              min = j;

           }


        }
        int temp = a[min];
        a[min] = a[i];
        a[i] = temp;

    }   


    return a;


}

1 Ответ

0 голосов
/ 07 ноября 2019

Внутренний цикл for имеет несколько ошибок:

  • j должен быть установлен равным i + 1 вместо i ,Это не ошибка, просто ненужное сравнение.
  • Вы увеличиваете i вместо j .
  • Условие также использует i вместо j . Он также должен включать последний элемент последовательности (убрать -1).

Может быть, просто небрежное копирование и вставка?

Это правильный код:

public static int[] selectionSort(int[] a) {
    for(int i = 0; i < a.length-1; i++) {
        int min = i;
        for(int j = i+1; j< a.length; j++) {
           if(a[min] > a[j]) 
              min = j;
        }
        int temp = a[min];
        a[min] = a[i];
        a[i] = temp;

    }   
    return a;
} 
...