📄 binarysearch.java
字号:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class BinarySearch 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[] ComparePt = new int[10]; //保存对分法的比较中间点
String msg = ""; //查找结果信息
public void init()
{
add(prompt);
add(input);
add(sortbtn);
input.addActionListener(this);
sortbtn.addActionListener(this);
}
public void paint(Graphics g)
{
for(int i=0;i<DataArray.length;i++)
g.drawString(Integer.toString(DataArray[i]),10+30*i,40);
for(int i=0;i<ComparePt.length;i++)
g.drawString(Integer.toString(ComparePt[i]),10+30*i,70);
g.drawString(msg,10,100);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == input)
{
DataArray[DataInputed++] = Integer.parseInt(input.getText());
if(DataInputed < 10)
{
prompt.setText("已输入" + DataInputed + "个数据,请继续");
input.setText("");
}
else //已输入10个数据
{
prompt.setText("已输入10个数据,不能再输入了");
input.setVisible(false);
}
}
if(e.getActionCommand() == "排序")
{
SortProcedure();
sortbtn.setLabel("查找"); //转换到查找功能
prompt.setText("请输入欲查找数据:");
input.setVisible(true); //输入查找数据
input.setText("");
repaint();
}
if(e.getActionCommand() == "查找") //启动查找功能
{
int k = BiSearch(Integer.parseInt(input.getText()));
if(k == -1) //没找到
msg = "序列中没有匹配的数据";
else
msg = "匹配的数据在序列的第" + k + "个位置";
repaint();
}
}
void SortProcedure()
{
int pass,i,temp;
for(pass=1;pass<DataArray.length;pass++) //插入多次,无序子列在减少
{
temp = DataArray[pass]; //本次插入到有序子列中的数据
for(i=pass-1;i>=0;i--) //一次插入过程,有序子列在增长
{
if(DataArray[i] <= temp) //选择有序子列中的合适位置
break;
else
DataArray[i+1] = DataArray[i];
}
DataArray[i+1] = temp; //i+1是合适的位置,插入新数据
}
}
int BiSearch(int key)//根据关键值key查找数据并返回其位置,若查找失败返回-1
{
int low=0; //查找范围下限
int high=DataArray.length-1; //查找范围上限
int mid; //中间数据点
int i = 0;
while(low <= high)
{
mid = (high + low)/2;
ComparePt[i++] = DataArray[mid];
if(DataArray[mid] == key) //找到了数据
return mid;
else if(DataArray[mid] < key) //缩小查找范围到后半个序列
low = mid + 1;
else //缩小查找范围到前半个序列
high = mid - 1;
}
return -1; //查找失败
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -