使用Java FX可视化经典排序算法

使用Java FX可视化经典排序算法

写在前面:都说计算机离不开对数据的排序和查找,计算机在处理任务的时候其实有80%的时间都在做查找的工作。这句话是我老师说的,具体情况是怎样我也不知道是为什么,反正吧,对数据排序其实就是为了更快的查找对吧。以前学排序算法的时候只是知道这种算法是这样排的,每一趟排序都只能手动写出来,一点也不直观,上个星期闲的无聊看到有个东西叫Java FX,是用来做Java程序UI界面的,听说比swing要好用,所以想到了用Java FX来做一个常见排序算法的过程。

先上几张图吧

冒泡排序

插入排序

快速排序

(这些gif图是我直接用github的连接的,因为大小超过2M了没法上传,如果看不了请转到排序github项目地址)

Java FX是jdk7出来的新特性,它和swing一个最大的不同之处就是Java FX可以使用fxml来配合Scene Builder来构建界面,这个非常类似于Android使用xml布局文件来设计界面。当然,如果你不想使用fxml,你可以直接使用代码来动态生成界面,这个和Android也是相类似的。Java FX的相关知识可以参考Java FX中文教程,当然,如果英语好的可以直接看官方文档,官方有Java FX的全部的API和丰富的示例,这里就不多介绍。

主界面的这样的

Java 顶部导航 javafx左侧导航_Java

各个按钮的功能就不用解释了。

主类是SortApp.java,继承了javafx.application.Application,这里使用的是动态构建界面这种方式。至于数据显示,这里动画所使用的时间并不能代表该排序算法的真正使用时间,因为这里是使用这样一个集合,它是记录排序过程中每次数据变化之后的数据位置,然后把整个变化过程播放出来。举个例子说,比如冒泡排序每当有前后两个数字交换了就会记录一次,这一次记录就是动画的一帧。

project中提供了一个Sort接口和一个SortAdapter类,实现Sort接口或者继承SortAdapter都可以,当有数据的位置发生变化时,需要调用com.spareyaya.dynamicsort.util.DataUtils#add(int[]) 方法来把这次数据变化记录下来。如冒泡排序:

@Override
public void sortDesc(int[] unsortedArray) {
if (Utils.isEmpty(unsortedArray)) {
return;
}
//记录数据变化
DataUtils.add(unsortedArray);
int tmp;
for (int i = 0; i < unsortedArray.length; i++) {
for (int j = unsortedArray.length - 1; j > i; j--){
if (unsortedArray[j] > unsortedArray[j-1]){
tmp = unsortedArray[j];
unsortedArray[j] = unsortedArray[j-1];
unsortedArray[j-1] = tmp;
//记录数据变化
DataUtils.add(unsortedArray);
}
}
}
}

目前已经实现的有冒泡排序、快速排序、插入排序、选择排序,其它的有兴趣可以自己去实现。

该项目的地址已经上传到github,我是github项目地址。

使用Java FX可视化经典排序算法相关教程