⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bubblesort.java

📁 本软件是使用java 开发的
💻 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 + -