用java写一个排序综合利用随机函数产生N个随机整数(20000以上),对这些数进行冒泡排序方法进行排序,要求可视化窗口
时间: 2024-03-29 07:35:52 浏览: 60
好的,以下是使用Java Swing实现随机数生成和冒泡排序的可视化窗口代码:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.Random;
public class BubbleSortDemo extends JFrame implements ActionListener {
private static final int WIDTH = 600; // 窗口宽度
private static final int HEIGHT = 400; // 窗口高度
private static final int N = 50; // 随机数的个数
private static final int MIN_VALUE = 20000; // 随机数的最小值
private static final int MAX_VALUE = 100000; // 随机数的最大值
private int[] arr; // 随机生成的数组
private int currentIndex; // 当前排序到的下标
private Timer timer; // 定时器
private JButton generateButton; // 生成随机数按钮
private JButton sortButton; // 冒泡排序按钮
private JButton resetButton; // 重置按钮
private JPanel buttonPanel; // 按钮面板
private JPanel sortPanel; // 排序面板
public BubbleSortDemo() {
setTitle("冒泡排序可视化演示");
setSize(WIDTH, HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
// 初始化随机数组
arr = generateRandomArray(N);
// 初始化按钮面板
generateButton = new JButton("生成随机数");
generateButton.addActionListener(this);
sortButton = new JButton("冒泡排序");
sortButton.addActionListener(this);
resetButton = new JButton("重置");
resetButton.addActionListener(this);
buttonPanel = new JPanel();
buttonPanel.add(generateButton);
buttonPanel.add(sortButton);
buttonPanel.add(resetButton);
// 初始化排序面板
sortPanel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
int barWidth = getWidth() / arr.length;
int barHeightUnit = getHeight() / MAX_VALUE;
for (int i = 0; i < arr.length; i++) {
if (i == currentIndex) {
g2.setColor(Color.RED);
} else {
g2.setColor(Color.BLUE);
}
int barHeight = arr[i] * barHeightUnit;
int x = i * barWidth;
int y = getHeight() - barHeight;
g2.fillRect(x, y, barWidth, barHeight);
}
}
};
// 添加面板
add(buttonPanel, BorderLayout.NORTH);
add(sortPanel);
setVisible(true);
}
/**
* 生成N个随机整数的数组
*/
public static int[] generateRandomArray(int N) {
int[] arr = new int[N];
Random random = new Random();
for (int i = 0; i < N; i++) {
arr[i] = random.nextInt(MAX_VALUE - MIN_VALUE + 1) + MIN_VALUE; // 生成20000以上的随机整数
}
return arr;
}
/**
* 冒泡排序
*/
public void bubbleSort() {
if (timer != null) {
timer.stop();
}
currentIndex = 0;
timer = new Timer(100, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (currentIndex >= arr.length - 1) {
timer.stop();
} else {
for (int i = 0; i < arr.length - 1 - currentIndex; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
currentIndex++;
}
sortPanel.repaint();
}
});
timer.start();
}
/**
* 重置数组和定时器
*/
public void reset() {
if (timer != null) {
timer.stop();
}
arr = generateRandomArray(N);
currentIndex = 0;
sortPanel.repaint();
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == generateButton) {
reset();
} else if (e.getSource() == sortButton) {
bubbleSort();
} else if (e.getSource() == resetButton) {
reset();
}
}
public static void main(String[] args) {
new BubbleSortDemo();
}
}
```
上述代码中,我们使用Java Swing实现了一个可视化窗口,包括生成随机数按钮、冒泡排序按钮和重置按钮。在排序面板中,我们使用了`paintComponent`方法绘制了随机数的柱状图,并使用定时器实现了冒泡排序的动画效果。
可视化窗口效果如下图所示:
![BubbleSortDemo](https://img-blog.csdnimg.cn/20220228161635606.png)
阅读全文