📄 bubblesort.java
字号:
package datastructure;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/
import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.EventObject;
public class BubbleSort
extends Panel
implements Runnable, ActionListener {
private Thread runner;
private groupBS thePersonGroup;
private boolean runFlag;
private Graphics graphics;
//控制演示速度
private GlobalControls controlsPanel;
private int controls;
//用来控制代码的同步显示
private CodeAnimationPanel codePanel;
//private int order;
JButton newButton;
JButton stayButton;
JButton runButton;
JButton stepButton;
private Panel panel;
private Image image;
// 以下各变量用于记录比较过程变量的变化
// text1显示比较次数
private JTextField text11 = new JTextField(" 比较次数");
static JTextField text1;
private JTextField text22 = new JTextField(" 交换次数");
// text2显示交换次数
static JTextField text2;
private JTextField text33 = new JTextField(" 排序个数 L.length");
// text3显示排序个数
static JTextField text3;
private JTextField text44 = new JTextField(" 第几趟排序pass");
// pass表示第几趟排序
static JTextField text4;
private JTextField text55 = new JTextField(" unsorted");
// unsorted表示是否发生交换
static JTextField text5;
private JTextField text66 = new JTextField(" j");
static JTextField text6;
private JTextField text7 = new JTextField(" 变 量 名 ");
private JTextField text77 = new JTextField(" 变 量 当 前 值 ");
//面板jPanel1用于添加显示变量变化的文本框
private Panel panel1 = new Panel();
public void Base() {
text1.setText(" 0");
text2.setText(" 0");
text3.setText(" 10");
text4.setText(" 1");
text5.setText(" false");
text6.setText(" 0");
}
public BubbleSort() {
init();
}
public void init() {
setLayout(new BorderLayout());
panel = new Panel();
panel.setLayout(new BorderLayout());
controlsPanel = new GlobalControls();
this.setBackground(Color.lightGray);
controlsPanel = new GlobalControls();
controls = controlsPanel.delay;
String a[] = {
" 算法伪代码",
"void Bubble_sort(Sqlist L)",
"{",
" unsorted=true; pass=1; //pass表示第几趟排序",
" while(unsorted && pass<L.length)",
" { ",
" unsorted=false; pass++;",
" for(j=0;j<L.length-pass;j++)",
" {",
" if(L.r[j].key>L.r[j+1].key)",
" { L.r[j].key<->L.r[j+1].key; //互换",
" unsorted=true;} // 交换后unsorted为真",
" }",
" }",
"}"};
codePanel = new CodeAnimationPanel(a);
controlsPanel.delay = 900;
setLayout(new FlowLayout(2));
newButton = new JButton("新 建");
newButton.addActionListener(this);
stayButton = new JButton("暂 停");
newButton.setToolTipText("建立演示数据");
stayButton.setToolTipText("暂停演示");
stayButton.addActionListener(this);
runButton = new JButton("执 行");
runButton.setToolTipText("演示执行");
runButton.addActionListener(this);
stepButton = new JButton("单 步");
stepButton.setToolTipText("单步执行演示");
stepButton.addActionListener(this);
text1 = new JTextField(" 0");
text2 = new JTextField(" 0");
text3 = new JTextField(" ");
text4 = new JTextField(" 1");
text5 = new JTextField(" false");
text6 = new JTextField(" 0");
text11.setEditable(false);
text1.setEditable(false);
text22.setEditable(false);
text2.setEditable(false);
text33.setEditable(false);
text3.setEditable(false);
text44.setEditable(false);
text4.setEditable(false);
text55.setEditable(false);
text5.setEditable(false);
text66.setEditable(false);
text6.setEditable(false);
text7.setEditable(false);
text77.setEditable(false);
panel1.add(text7);
panel1.add(text77);
panel1.add(text11);
panel1.add(text1);
panel1.add(text22);
panel1.add(text2);
panel1.add(text33);
panel1.add(text3);
panel1.add(text44);
panel1.add(text4);
panel1.add(text55);
panel1.add(text5);
panel1.add(text66);
panel1.add(text6);
panel1.setLayout(new GridLayout(7, 2));
panel.add(codePanel, BorderLayout.NORTH);
panel.add(panel1, BorderLayout.CENTER);
add(panel, BorderLayout.EAST);
Base();
thePersonGroup = new groupBS(codePanel);
}
public void paint(Graphics g) {
if (this.thePersonGroup != null)
thePersonGroup.draw(g);
}
public void update(Graphics g) {
image = createImage(450, 450);
graphics = image.getGraphics();
graphics.setColor(getBackground());
// graphics.fillRect(0, 0, 350, 400);
paint(graphics);
g.drawImage(image, 0, 0, null);
}
public void actionPerformed(ActionEvent actionevent) {
if (actionevent.getSource() == newButton) {
stop();
Base();
FrameBS.data.setVisible(true);
thePersonGroup = new groupBS(codePanel);
stepButton.setEnabled(true);
runFlag = false;
runButton.setEnabled(true);
repaint();
}
else if (actionevent.getSource() == stayButton) {
runFlag = false;
}
else if (actionevent.getSource() == runButton) {
runFlag = true;
start(); //启动线程
}
else if (actionevent.getSource() == stepButton) {
stop();
runFlag = false;
thePersonGroup.Bubble_sort();
repaint();
// 当排序完成时执行
if (thePersonGroup.getDone()) {
runFlag = false;
stepButton.setEnabled(false);
runButton.setEnabled(false);
JOptionPane.showConfirmDialog(this,
" 算法演示完成!\n \n 单击相关按钮重新开始\n",
"演示完成", JOptionPane.DEFAULT_OPTION);
stop();
}
}
}
public void run() {
while (Thread.currentThread() == runner) {
if (runFlag) {
thePersonGroup.Bubble_sort();
try {
// 控制演示速度
controls = controlsPanel.delay;
if (controls <= 20)
controls = 20;
Thread.sleep(controls);
}
catch (InterruptedException e1) {}
repaint();
// 当排序完成时执行
if (thePersonGroup.getDone()) {
runFlag = false;
stepButton.setEnabled(false);
runButton.setEnabled(false);
JOptionPane.showConfirmDialog(this,
" 算法演示完成!\n \n 单击相关按钮重新开始\n",
"演示完成", JOptionPane.DEFAULT_OPTION);
stop();
}
}
}
}
//启动线程
public void start() {
if (runner == null) {
runner = new Thread(this);
runner.start();
}
}
//终止线程
public void stop() {
if (runner != null) {
runner.yield();
runner = null;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -