Двоичный поиск в массиве - 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;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д