使用Java FX可視化經典排序算法

寫在前面:都說計算機離不開對數據的排序和查找,計算機在處理任務的時候其實有80%的時間都在做查找的工作。這句話是我老師說的,具體情況是怎樣我也不知道是爲什麼,反正吧,對數據排序其實就是爲了更快的查找對吧。以前學排序算法的時候只是知道這種算法是這樣排的,每一趟排序都只能手動寫出來,一點也不直觀,上個星期閒的無聊看到有個東西叫Java FX,是用來做Java程序UI界面的,聽說比swing要好用,所以想到了用Java FX來做一個常見排序算法的過程。
先上幾張圖吧

  • 冒泡排序
    bubble sort
  • 插入排序
    insertion sort
  • 快速排序
    quick sort
    (這些gif圖是我直接用github的連接的,因爲大小超過2M了沒法上傳,如果看不了請轉到排序github項目地址

Java FX是jdk7出來的新特性,它和swing一個最大的不同之處就是Java FX可以使用fxml來配合Scene Builder來構建界面,這個非常類似於Android使用xml佈局文件來設計界面。當然,如果你不想使用fxml,你可以直接使用代碼來動態生成界面,這個和Android也是相類似的。Java FX的相關知識可以參考Java FX中文教程,當然,如果英語好的可以直接看官方文檔,官方有Java FX的全部的API和豐富的示例,這裏就不多介紹。
主界面的這樣的
這裏寫圖片描述

各個按鈕的功能就不用解釋了。
主類是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項目地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章