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

📄 ch6_e6_22.java

📁 代码包括《Java语言与面向对象程序设计题解与实验指导》一书中 “习题解答”部分的所有程序的Java源代码和编译后生成的字节码或相应的HTML文件。 盘中的目录与书中的章节一致。
💻 JAVA
字号:
import java.applet.*; 
import java.awt.*;
import java.awt.event.*;

public class ch6_e6_22 extends Applet implements ActionListener
{
    final String SORT_METHOD_NAME[] = {"冒泡排序","选择排序"};
    
    Label prompt = new Label("请输入欲排序的字符串(最多10个):");
    TextField input = new TextField(5);
    Button sortBubbleBtn = new Button(SORT_METHOD_NAME[0]);
    Button sortSelectBtn = new Button(SORT_METHOD_NAME[1]);

    String[] OrigArray = new String[10];  //保存排序前顺序的数组
    String[] DataArray = new String[10];  //保存待排序数据的数组
    int DataInputed = 0;                //已输入数据的统计
    String[][] SortPro = new String[11][10];  //保存排序过程的二维数组

    public void init()              //初始化
    {
        for(int i=0; i<10; i++)
        {
            DataArray[i] = " ";
            OrigArray[i] = " ";
            SortPro[10][i] = " ";
            for(int j=0; j<10; j++)
                SortPro[i][j] = " ";
        }
        
        add(prompt);
        add(input);
        add(sortBubbleBtn);         //将提示,输入区域,按钮加入Applet
        add(sortSelectBtn);

        input.setText("");
        input.addActionListener(this);
        sortBubbleBtn.addActionListener(this);
        sortSelectBtn.addActionListener(this);
    }
    
    public void paint(Graphics g)//打印排序全过程
    {
        for(int i=0;i<SortPro.length;i++)       //二维数组的行数
            for(int j=0;j<SortPro[i].length;j++)    //二维数组第i行中的数据个数
            {
                //try
                //{
                g.drawString(SortPro[i][j],10+80*j,40+20*i);
                //}
                //catch(NullPointerException npe)
                //{
                //    System.out.println(i+ "," +j);
                //}
            }
    }
    
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == input)//用户在input中输入并回车时
        {   //记录数据
            DataArray[DataInputed] = input.getText();
            OrigArray[DataInputed] = DataArray[DataInputed];
            DataInputed++;
            if(DataInputed < 10)
            {
                prompt.setText("已输入" + DataInputed + "个字符串,请继续");
                input.setText("");      //准备输入下一个数据
            }
            else                         //已输入10个数据
            {
                prompt.setText("已输入10个字符串,不能再输入了");
                input.setVisible(false);        //隐藏其输入区域
            }
        }
        if(e.getSource() == sortBubbleBtn)      //用户单击按钮,启动排序过程
        {
            for(int i=0;i<DataArray.length;i++) //记录未排序的原始数据
                SortPro[0][i] = DataArray[i];
            BubbleSortProcedure();              //调用冒泡排序方法
            repaint();
            for(int i=0;i<DataArray.length;i++)
                DataArray[i] = OrigArray[i];    //恢复排序前的乱序
        } 
        if(e.getSource() == sortSelectBtn)
        {
            for(int i=0;i<DataArray.length;i++) //记录未排序的原始数据
                SortPro[0][i] = DataArray[i];
            SelectSortProcedure();              //调用选择排序方法
            repaint();        
            for(int i=0;i<DataArray.length;i++)
                DataArray[i] = OrigArray[i];    //恢复排序前的乱序
        }
    }
    
    void BubbleSortProcedure()    //冒泡排序方法
    {
        int pass,i,exchangeCnt;
        String temp = "";

        for(pass=0;pass<DataArray.length;pass++)        //扫描多次
        {
            exchangeCnt=0;//记录本轮两两交换的次数
            for(i=0;i<DataArray.length-pass-1;i++)      //一次扫描过程
            {                                   //每次扫描比较范围缩小一个
                if(DataArray[i].compareToIgnoreCase(DataArray[i+1]) > 0)     //一次两两比较交换过程
                {
                    temp = DataArray[i];
                    DataArray[i] = DataArray[i+1];
                    DataArray[i+1] = temp;
                    exchangeCnt++;
                }
            }
            for(i=0;i<DataArray.length;i++)
                SortPro[pass+1][i] = DataArray[i];    //记录本轮扫描后数据排列情况
            if(exchangeCnt == 0) //若一次也未交换,则说明已完全排好序,不必再循环
                return;
        }
    }
    
    void SelectSortProcedure()          //选择排序方法
    {
        int pass,i,k;
        String temp = "";

        for(pass=0;pass<DataArray.length-1;pass++)      //选择多次,有序子列在增长
        {
            for(i=pass,k=i;i<DataArray.length;i++)      //一次选择过程,无序子列在减少
                if(DataArray[i].compareToIgnoreCase(DataArray[k]) < 0)       //选择剩余未排序数据中的最小者
                    k = i;                   
            temp = DataArray[pass];//排在剩余数据的最前面
            DataArray[pass] = DataArray[k];
            DataArray[k] = temp;
            for(i=0;i<DataArray.length;i++)
                SortPro[pass+1][i] = DataArray[i];//记录本轮选择后数据排列情况
        }
    }

    
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -