排序算法可视化是理解算法工作原理的有效工具。通过可视化,我们可以直观地看到不同算法在不同数据分布下的表现。
import javax.swing.*;
import java.awt.*;
import java.util.Random;
public class SortingVisualizer extends JPanel {
private int[] arr;
private static final int BAR_WIDTH = 3;
private static final int DELAY = 1;
public SortingVisualizer(int size) {
arr = new int[size];
Random random = new Random();
for (int i = 0; i < size; i++) {
arr[i] = random.nextInt(getHeight());
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
for (int i = 0; i < arr.length; i++) {
int height = arr[i];
g.fillRect(i * BAR_WIDTH, getHeight() - height, BAR_WIDTH - 1, height);
}
}
public void bubbleSortVisualized() {
new Thread(() -> {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
repaint();
try {
Thread.sleep(DELAY);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}
}).start();
}
public static void main(String[] args) {
JFrame frame = new JFrame("排序算法可视化");
SortingVisualizer visualizer = new SortingVisualizer(200);
frame.add(visualizer);
frame.setSize(600, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
visualizer.bubbleSortVisualized();
}
}