43 lines
2.3 KiB
C#
43 lines
2.3 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
|
|||
|
namespace Alg;
|
|||
|
class Program // O(log(n))
|
|||
|
{
|
|||
|
static void Main()
|
|||
|
{
|
|||
|
int[] arr = { 2, 3, 4, 10, 40 };//Инициализация массива arr с элементами 2, 3, 4, 10, 40.
|
|||
|
int x = 10;//Определение переменной x, которая равна искомому элементу.
|
|||
|
int result = BinarySearch(arr, x);//Вызов метода BinarySearch для поиска элемента x в массиве arr.
|
|||
|
|
|||
|
if (result == -1)//Проверка результата поиска и вывод соответствующего сообщения.
|
|||
|
|
|||
|
Console.WriteLine("Элемент не найден");
|
|||
|
else
|
|||
|
Console.WriteLine("Элемент найден в индексе: " + result);
|
|||
|
}
|
|||
|
static int BinarySearch(int[] arr, int x)//Объявление метода BinarySearch, который принимает массив arr и искомый элемент x.
|
|||
|
{
|
|||
|
int left = 0;//Инициализация переменной left, которая указывает на начальный индекс массива.
|
|||
|
int right = arr.Length - 1;//Инициализация переменной right, которая указывает на конечный индекс массива.
|
|||
|
|
|||
|
while (left <= right)// Начало цикла, который выполняется, пока левая граница не превысит правую.
|
|||
|
{
|
|||
|
int mid = left + (right - left) / 2;//Вычисление среднего индекса mid для деления массива на две части.
|
|||
|
|
|||
|
if (arr[mid] == x)//Проверка, является ли элемент в середине массива равным искомому элементу x.
|
|||
|
return mid;
|
|||
|
|
|||
|
if (arr[mid] < x)//Если элемент в середине меньше x, сдвигаем левую границу поиска.
|
|||
|
left = mid + 1;
|
|||
|
else
|
|||
|
right = mid - 1;//Иначе сдвигаем правую границу поиска.
|
|||
|
}
|
|||
|
|
|||
|
return -1; // элемент не найден
|
|||
|
}
|
|||
|
}
|