import java.applet.Applet;
import java.awt.Button;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class BubbleSort extends Applet implements ActionListener{//定义主类
Label prompt=new Label("请输入想要排序的整数数据(最多10个):");
TextField input=new TextField(5);
Button sortbtn=new Button("排序");
int [] DataArray=new int[10];//保持待排序的数组
int DataInputed=0;//已输入数据的统计
int[][] SortPro=new int[11][10];//保存排序过程的二维数组
public void init(){//初始化
add(prompt);
add(input);
add(sortbtn);//将提示、输入区域、按钮加入Applet
input.addActionListener(this);
sortbtn.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行中的数据个数
g.drawString(Integer.toString(SortPro[i][j]), 10+30*j, 40+20*i);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==input){//用户在input中输入并回车时记录数据
DataArray[DataInputed++]=Integer.parseInt(input.getText());
if(DataInputed<10){
prompt.setText("已输入"+DataInputed+"个数据,请继续");
input.setText("");//准备下一个数据
}
else{
prompt.setText("已输入10个数据,不能再输入了");
input.setVisible(false);//隐藏输入区域
}
if(e.getSource()==sortbtn){//用户单击按钮,启动排序过程
for(int i=0;i<DataArray.length;i++)
SortPro[0][i]=DataArray[i];//保持未排序的原始数据
SortProcedure();//调用排序方法
repaint();
}
}
}
void SortProcedure(){//排序方法
int pass,i,temp,exchangeCnt=0;
for(pass=0;pass<DataArray.length;pass++){//扫描多次
for(i=0;i<DataArray.length-pass-1;i++){//记录本轮两两交换的次数
if(DataArray[i]>DataArray[i+1]){
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;
}
}
}