
4.3 2分探索法 |
||||
|
|
||||
| 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; } } |