почему эта пузырьковая сортировка не работает с использованием простого статического целочисленного массива? - PullRequest
0 голосов
/ 21 мая 2019

Я пытался реализовать Bubble Sort, используя простой статический целочисленный массив в Java. Однако, похоже, есть какая-то проблема.

class BubbleSort {
    static int[] a = { 10, 8, 11, -6, 9 };

    public void swap(int i, int k) {
        if (a[i] == a[k])
            return;

        int temp;
        temp = a[i];
        a[i] = a[k];
        a[k] = temp;

    }

    public static void main(String[] args) {
        BubbleSort bs = new BubbleSort();
        for (int end = a.length - 1; end > 0; end--) {
            for (int i = 0; i < end; i++) {
                if (a[i] > a[i + 1])
                    bs.swap(i, i++);
            }
        }
        for (int j = 0; j < a.length; j++)
            System.out.println(a[j]);

    }
}

я ожидаю вывод -6,8,9,10, но фактический вывод вообще не отсортирован. Показывает 10,8, -6,9

Ответы [ 2 ]

4 голосов
/ 21 мая 2019

Ваша ошибка в вызове своп.Ваш код

bs.swap(i, i++);

такой же, как:

bs.swap(i, i); i=i+1;

Но вы не хотите увеличивать i и, конечно: вы хотите назвать его с i и i + 1.Так что измените его на

bs.swap(i, i+1);
2 голосов
/ 21 мая 2019

Проблема заключается в следующем утверждении:

bs.swap(i, i++);

Из-за постинкремента будет вызываться bs.swap с теми же значениями i, что и постинкремент возвращает предыдущее значение.Вместо этого вы должны позвонить bs.swap(i, i + 1).

...