【问题标题】:Sorting Graph with Insertion Sort使用插入排序对图进行排序
【发布时间】:2018-05-11 07:28:16
【问题描述】:

我正在尝试逐步对图中的一堆线条进行排序,以展示不同的算法如何与 GUI 和计时器一起工作。

这就是它的样子:

]

我已经让 冒泡排序 像这样工作:

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();

这就是开始和最终的结果(它们工作正常)。

编辑: 我知道在完成完整排序之前我实际上并没有将数字插入到数组中,然后我重新绘制。我仍然无法修复它(无法想象它)。更具体的帮助将不胜感激。谢谢!

【问题讨论】:

标签: java swing loops sorting timer


【解决方案1】:

您看不到更新,因为您不执行交换。您只是为插入的元素选择正确的位置(同时将元素一直向右移动),然后插入,然后才重新绘制。

如果您改为进行交换(就像您在冒泡排序中所做的那样)并在每次交换后重新绘制,您会看到所有必要的更新

【讨论】:

    猜你喜欢
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    相关资源
    最近更新 更多