首页 > 解决方案 > 通过 java swing 实现快速排序可视化

问题描述

我想使某种排序算法可视化是java swing,但我坚持使用快速排序,因为我需要在每次迭代时停止分区循环,以便数组可以重绘。这就是我想做的,但没有任何成功

 public int partition(int lowIndex, int highIndex,int i)
    {
        int pivot = highIndex;

        for(int j=lowIndex; j<highIndex; j++)
        {
            if(isBigger(j,pivot))
            {
                i++;
                swap(i,j);
                return i;
            }
        }
         swap(i+1,pivot);

        return i+1;
    }

也没有找到任何好的解决方案来跟踪我。我只是一无所知

标签: javaswingsortingvisualization

解决方案


谷歌搜索“Java swing 可视化排序算法”,你会发现很多热门。

例如:

Code Review:排序算法可视化程序

关键点:

  • 您需要修改“排序”代码以在每一步触发某种“事件”(例如,每次交换元素时):

    例子:

    public class BubbleSort implements SortingAlgorithm {
      ...
      @Override
      public void doSort(int[] nums) {
        ...
        SortingAlgorithm.setCurrentBar(j+1);
        SortingAlgorithm.sleepFor(delay);
    
  • “事件处理程序”将重绘数组(或者更准确地说,请求事件调度程序线程 (EDT) 重绘)。

  • 因此,事件处理程序需要“了解”数组和当前索引

    例子:

    public abstract interface SortingAlgorithm {
      ...
      public abstract void doSort(int[] nums);
    
      public abstract void changeDelay(int delay);
    
      public static void setCurrentBar(int currentBarIndex) {
        PaintSurface.currentBarIndex = currentBarIndex;
      }
      ...
    
  • 每一步之间也需要有某种“延迟”

  • 此示例使用SwingUtilities.invokeLater()。示例camickr建议使用 SwingWorker。

我希望这能给您一些想法,并为您指明正确的方向!


推荐阅读