пытаясь реализовать сортировку выбора, но это не сработает - PullRequest
1 голос
/ 10 мая 2019

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

public static void selectionSort(int[] a) {
    int n = a.length;
    System.out.println(n);
    for (int i = 0; i < n - 1; i++) {
        int min = i;
        for (int j = i + 1; j < n; j++) {
            if (a[j] < a[min]) {
                int swap = a[i];
                a[i] = a[min];
                a[min] = swap;
            }
        }
    }
}

Алгоритм: находит минимальное значение в списке. Меняет местами значение в первой позиции. Повторите шаги выше для остальной части списка (начиная со второй позиции и продвигаясь каждый раз). Он делит список на две части. Список товаров уже отсортирован. Подсписок элементов, оставшихся для сортировки.

ввод

int[] a = new int[]{-2, 4, 8, 1, 9, -6};

ожидаемый результат

-6, -2, 1, 4, 8, 9

Ответы [ 3 ]

1 голос
/ 10 мая 2019

Проблема заключается в цикле for, min и i переменных.

int min = i; //min variable is useless, as min is always equals to i
for (int j = i + 1; j < n; j++) {
    if (a[j] < a[min]) {
        int swap = a[i];
        a[i] = a[min]; // remember min equals to i, so here you are assigning the same value
        a[min] = swap; // this should be a[j]
    }
}

Изменение цикла for

for (int j = i + 1; j < n; j++) {
    if (a[j] < a[i]) {
        int swap = a[i];
        a[i] = a[j];
        a[j] = swap;
    }
}
1 голос
/ 10 мая 2019

Вы можете просто использовать класс java.util.Arrays для этого

int[] a = new int[]{-2, 4, 8, 1, 9, -6};
Arrays.sort(a);

сортирует массив a в порядке возрастания (ожидаемый результат).


Java предварительно собран с несколькими инструментами. Всегда ищите их, написание собственного алгоритма - это весело, но оно может быть ошибочным и кропотливым.

1 голос
/ 10 мая 2019

Вы пропустили важный шаг, чтобы обновить минимальный индекс здесь.Посмотрите на , если блок в коде ниже.

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