private int[] myArray= new int[]{4,8,20,28,30,35,40,59,65,75,95};
private int Mode; // 逐次的に処理するための変数
private int MP1, MP2, MV; //
逐次的に処理するための変数
private int 探索(int V)
{
int p1 = 0; int p2 = myArray.Length -
1; int p;
while(p1<=p2)
{
p = (p1 + p2) / 2;
if (myArray[p] ==V ) return p;
else if(myArray[p] < V) p1 =
p + 1;
else p2 = p - 1; }
return -1;
}
private void button1_Click(object sender,
System.EventArgs e)
{
int R = 探索(int.Parse(textBox1.Text));
listBox1.SelectedIndex=R;
if (R<0) MessageBox.Show("探索失敗");
}
private void Form1_Load(object sender, System.EventArgs
e)
{
listBox1.Items.Clear();
for(int i=0; i<myArray.Length; i++)
listBox1.Items.Add(myArray[i].ToString());
Mode=0;
}
private void button2_Click(object sender,
System.EventArgs e)
{
int p, CV ; string Cmp, R;
if (Mode == 0)
{
MP1 = 0; MP2=myArray.Length - 1;
MV = int.Parse(textBox1.Text);
Mode = 1;
}
p = (MP1 + MP2) / 2;
CV = myArray[p];
if (CV == MV) { Cmp=" = ";
R = "検索成功"; Mode = 0; }
else
{
if(CV < MV){ Cmp = "
< "; MP1 = p + 1;}
else { Cmp = "
> " MP2 = p - 1;}
R = ””;
if (MP2 < MP1) { R = “検索失敗”;
Mode = 0;}
}
label2.Text = CV.ToString() + Cmp +
MV.ToString() + " " + R;
listBox1.SelectedIndex = p;
if(R != "")
{
MessageBox.Show("探索がおわりました");
listBox1.SelectedIndex = -1;
}
}
|