Двоичный поиск в массиве - C#
Формулировка задачи:
Я не могу понять какой записан тут способ поиска двоичный или другой совсем??? если не двоичный, то тогда как записать двоичный?? помогите пожалуйста написать. у меня даже псевдокод есть, но я по нему не понимаю. все равно как записать двоичный. Вот что то писала но мне кажется это не то совсем.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication12
{
class Program
{
static void Main(string[] args)
{
short p, n, m;
Console.Write("m = ");
// ввод, преобразование и присваивание размер массива A
m = Convert.ToInt16(Console.ReadLine());
Console.Write("n = ");
// ввод, преобразование и присваивание размер массива B
n = Convert.ToInt16(Console.ReadLine());
int maxValue = 100;
Random Rnd = new Random();
int t1 = Environment.TickCount;
int[] a = new int[m];
for (int i = 0; i < m; i++)
{
a[i] = Rnd.Next(0, maxValue); // Случайное число от 0 до 100
}
int[] b = new int[n];
for (int i = 0; i < n; i++)
{
b[i] = Rnd.Next(0, maxValue); // Случайное число от 0 до 100
}
for (int i = 0; i < m; i++)
{
Console.Write(" " + a[i]); // Вывод массива А
Console.WriteLine();
}
for (int i = 0; i < n; i++)
{
Console.Write(" " + b[i]); // Вывод массива В
Console.WriteLine();
//Сортировка массива А методом "Пузырька"
}
for (int i = 0; i < m; i++)
for (int j = m - 1; j > i; j--)
{
if (a[j - 1] > a[j])
{
int x = a[j - 1];
a[j - 1] = a[j];
a[j] = x;
}
//Сортировка массива В методом "Пузырька"
}
for (int i = 0; i < n; i++)
for (int j = n - 1; j > i; j--)
if (b[j - 1] > b[j])
{
int x = b[j - 1];
b[j - 1] = b[j];
b[j] = x;
}
for (int i = 0; i < m; i++)
Console.Write(" " + a[i]); // Вывод массива А
Console.WriteLine();
for (int i = 0; i < n; i++)
Console.Write(" " + b[i]); // Вывод массива В
int Num_C = 0;
int[] c = new int[n];
// заполнение массива С нулями
// поиск элементов
for (int i = 0; i < m; i++)
{
for (int j = i + 1; j < m; j++)
{
if (b[i] == b[j])
{
p = 0;
for (int k = 0; k < n; k++)
if (a[k] == b[i])
{
p++;
}
if(p == 1)
{
//запись в массив C
c[Num_C] = b[i];
Num_C++;
}
}
}
}
Console.WriteLine();
for (int i = 0; i < Num_C; i++)
Console.Write(" " + c[i]); // Вывод массива C
int t2 = Environment.TickCount;
Console.WriteLine("Продолжительность работы: " + ((t2 - t1) / 1000));//вывод на экран продолжительности выполнения программы
Console.ReadKey();
}
}
}Решение задачи: «Двоичный поиск в массиве»
textual
Листинг программы
private static int BinarySearch(int[] arr, int val)
{
Array.Sort(arr);
int right = arr.Length - 1;
int left = 0;
if (arr[left] > val) return -1;
if (arr[right] < val) return -1;
while (left < right)
{
int mid = left + (right - left)/2;
if (val <= arr[mid]) right = mid;
else if (val > arr[mid]) left = mid + 1;
else return mid;
}
return -1;
}