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; // элемент не найден
|
||
}
|
||
}
|