Сортировка графа с вставкой сортировки - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь пошагово отсортировать несколько строк на графике, чтобы показать, как разные алгоритмы работают с графическим интерфейсом и таймерами.

Вот как это выглядит:

The interface when the program is run]

У меня есть Bubble sort для работы следующим образом:

timer = new Timer(500, new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        for (int m = 0; m < tal.length; m++) {
                            for (int n = 0; n < m; n++) {
                                if (tal[n] > tal[n + 1]) {
                                    int temp = tal[n];
                                    tal[n] = tal[n + 1];
                                    tal[n + 1] = temp;
                                    grafPanel.repaint();
                                }
                            }
                        }
                    }
                });
timer.start();

Однако, когда я пытаюсь сделать что-то подобное с сортировкой вставок , весь график рисуется немедленно (не на шаг за один раз, как я хочу).

Вот этот код:

timer = new Timer(500, new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        for (int n = 0; n < tal.length; n++) {
                            int temp = tal[n];
                            int i = n - 1;
                            while (i >= 0 && tal[i] > temp) {
                                tal[i + 1] = tal[i];
                                i--;
                            }
                            tal[i + 1] = temp;
                            grafPanel.repaint();

                        }
                    }
                });
                timer.start();

Вот каковы начальные и конечные результаты (они отлично работают). Before the sorting: After the sorting:

Edit: Я понимаю, что на самом деле я не вставляю числа в массив до полной сортировки, а затем перекрашиваю. Я все еще не могу это исправить, хотя (не могу представить это). Более конкретная помощь будет оценена. Спасибо!

1 Ответ

0 голосов
/ 11 мая 2018

вы не видите обновлений, потому что вы не выполняете обмен. вы просто подбираете подходящее место для вставленного элемента (при этом все время смещая элементы вправо), затем вставляете, и только после этого перерисовываете.

если вы вместо этого делаете свопы (как в пузырьковой сортировке) и перекрашиваете после каждого свопа, вы увидите все необходимые обновления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...