Двоичный поиск в массиве - 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;
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы