首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 可視化排序演算法大全:從冒泡到堆排序的動態演示

     編輯:Java 相關知識

專為教學與理解設計的排序動畫框架

這個 Sorter 類不只是排序演算法的代碼集合,更是一個基於 Swing 的可視化教學工具。它將 9 種經典排序演算法(選擇、插入、冒泡、侏儒、希爾、快速、堆、歸並、計數排序)封裝為統一介面,並通過繼承 JPanel 實時繪製數組狀態,讓抽象的演算法過程變得直觀可見。

核心架構設計亮點

1. 統一的動畫控制機制

所有排序方法在關鍵操作(比較、交換、移動)處調用 PAUSE(),該方法通過 Thread.sleep(1) 讓出 CPU 時間片,同時配合獨立繪製線程(runAnimation() 每 30ms 重繪),實現流暢動畫。停止按鈕通過拋出 RuntimeException 中斷排序線程,雖然粗暴但有效。

2. 反射驅動的策略模式

主程式通過 JComboBox 選擇演算法名稱,利用反射 Sorter.class.getMethod(methodName).invoke() 動態調用對應方法,無需硬編碼 switch-case,極易擴展新演算法。

3. 視覺化映射邏輯

paintComponent() 將整數數組映射為垂直線條:索引為 X 軸,數值為 Y 軸高度(MAX_VALUE - array[i]),形成直觀的柱狀圖效果。

九大演算法實現細節解析

演算法時間複雜度特點與代碼亮點
選擇排序O(n²)每輪選最小值交換到前端,雙重循環結構清晰
插入排序O(n²)將當前元素向前插入有序區,適合近乎有序數據
冒泡排序O(n²)相鄰元素比較交換,大值「冒泡」到末尾
侏儒排序O(n²)類似插入但單循環,索引前進後退像侏儒走路
希爾排序O(n¹·⁵)分組插入排序,間距逐漸縮小,代碼註釋承認實現較簡陋
快速排序O(n log n)先打亂數組避免最壞情況,雙指針分區遞歸
堆排序O(n log n)兩階段:建最大堆 + 依次取堆頂重建,索引運算精妙
歸並排序O(n log n)經典分治 + 輔助數組合併,穩定排序典範
計數排序O(n+k)非比較排序,適用非負整數且值域小,注意記憶體風險

教學價值與擴展建議

此框架極適合資料結構課程演示。建議擴展方向:

  • 增加演算法複雜度理論面板與實際比較次數統計
  • 支援自定義輸入數組(從檔案/手動輸入)
  • 加入基數排序、TimSort 等現代演算法
  • 優化動畫控制:使用 SwingWorker 替代裸線程,避免 EDT 阻塞
  • 導出排序過程為 GIF/視頻供離線教學

代碼規範提醒

原始代碼存在包名大寫(Java.、Javax.)、缺少泛型、異常吞噬等問題,現代化重構時應修正為標準小寫包名、補全泛型、妥善處理異常。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved