public void Find(object o) { Pair p=(Pair)o; int start1=p.start; int end2=p.end; int start2 = start1+(end2 - start1) / 2 + 1; int end1=start2-1; //ChangeShowRichTextBox2(start1 + "-" + end2 + "\n"); resultText += start1 + "-" + end2 + "\n"; int j = 0; if (!найдено) { if(end2-start1<=n+1) { // Обычный поиск for (j = start1; j <= end2 && !найдено; j++) { if (massArray[j] == число) { resultText += start1 + "-" + end2 + "; НА ПОЗИЦИИ = " + j + "\n"; //ChangeShowRichTextBox2(start1 + "-" + end2 + "; НА ПОЗИЦИИ = "+j+"\n"); position = j; найдено = true; break; } } } else { Thread t1 = new Thread(new ParameterizedThreadStart(Find)); Pair p1=new Pair(); p1.start=start1; p1.end=end1; t1.Start(p1); Thread t2 = new Thread(new ParameterizedThreadStart(Find)); Pair p2 = new Pair(); p2.start = start2; p2.end = end2; t2.Start(p2); } if(j!=0 && j!=end2+1) { resultText += start1 + "-" + end2 + "; ПОТОК ВЫЛЕТЕЛ НА ПОЗИЦИИ = " + j + "\n"; } } }
// Поиск числа в массиве private void button3_Click(object sender, EventArgs e) { int start = 0; int end = massArray.Length-1; // Глубина поиска n = (int)Math.Log(massArray.Length,2); число = int.Parse(textBox9.Text); найдено = false; richTextBox2.Text = ""; resultText = ""; Pair p = new Pair(); p.start = start; p.end = end; Thread t = new Thread(new ParameterizedThreadStart(Find));; t.Start(p); while (!найдено) { } // Вывод textBox10.Text = position.ToString(); richTextBox2.Text = resultText; }