java - 通过 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;
}
也没有找到任何好的解决方案来跟踪我。我只是一无所知
解决方案
谷歌搜索“Java swing 可视化排序算法”,你会发现很多热门。
例如:
关键点:
您需要修改“排序”代码以在每一步触发某种“事件”(例如,每次交换元素时):
例子:
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。
我希望这能给您一些想法,并为您指明正确的方向!
推荐阅读
- angular - 需要 angular-google-maps fitBoundsAccessor 抽象类示例
- typescript - 将打字稿编译成不同的路径
- python - 如何使用 matplotlib 绘制 collections.Counter 直方图?
- c++ - 类型推理“自动”和引用调用如何工作?
- github - 我的 Travis-CI 与 GitHub 的集成失败了
- javascript - Add popover containing image in a table - Shiny
- android - 将依赖项“com.google.android.gms:play-services-location:15.0.1”添加到“com.android.support:appcompat-v7:28.0.0”后面临错误
- java - manyTomany 会出现性能问题吗?
- php - 为什么我不能在 PHP 中创建 MySQL 存储过程?
- c# - 现场测试 ASP.NET 自定义角色提供程序