📄 ch6_e6_22.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 + -