Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СиАОД_ЛабРаб-2_Вар9.docx
Скачиваний:
0
Добавлен:
18.01.2026
Размер:
161.46 Кб
Скачать

Федеральное агентство связи

Ордена Трудового Красного Знамени

Федеральное государственное бюджетное образовательное учреждение высшего образования

«Московский технический университет связи и информатики»

Кафедра Математической Кибернетики и Информационных Технологий

Отчет по лабораторной работе

по предмету «СиАОД»

на тему:

«Методы поиска»

Руководитель:

Кутейников И. А.

Москва 2024

Цель работы

Реализовать заданный метод поиска в соответствии с индивидуальным заданием. Организовать генерацию начального набора случайных данных. Для всех вариантов добавить реализацию добавления, поиска и удаления элементов. Оценить время работы каждого алгоритма поиска и сравнить его со временем работы стандартной функции поиска, используемой в выбранном языке программирования.

Вариант 9 Метод поиска: бинарный поиск

Код программы

using System;

using System.Diagnostics;

namespace LR2

{

class Program

{

static void Main(string[] args)

{

Console.WriteLine("Введите размер массива");

int n = int.Parse(Console.ReadLine());

List<int> array = new List<int>(n);

Random rnd = new Random();

for (int i = 0; i < n; i++) array.Add(rnd.Next(100));

array.Sort();

int select = 0;

do

{

Console.WriteLine("Введите цифру, соответствующую номеру желаемой операции:");

Console.WriteLine("1 - вставка элемента, 2 - поиск элемента, 3 - удаление элемента, 4 - вывод массива, 5 - завершение работы");

select = int.Parse(Console.ReadLine());

switch (select)

{

case 1:

Insert(array);

break;

case 2:

Console.WriteLine("Введите значение для поиска");

int value = int.Parse(Console.ReadLine());

Stopwatch stopwatch = new Stopwatch();

stopwatch.Start();

string result;

result = Convert.ToString(BinarySearch(array, value, 0, array.Count) + 1);

stopwatch.Stop();

if (result == "0") result = "элемент не найден";

Console.WriteLine(@"Результат бинарного поиска, позиция найденного элемента: {0}", result);

TimeSpan resultTime = stopwatch.Elapsed;

Console.WriteLine(@"Время работы бинарного поиска: {0}", resultTime);

stopwatch.Reset();

stopwatch.Start();

result = Convert.ToString(array.IndexOf(value) + 1);

stopwatch.Stop();

if (result == "0") result = "элемент не найден";

Console.WriteLine(@"Результат встроенного поиска, позиция найденного элемента: {0}", result);

resultTime = stopwatch.Elapsed;

Console.WriteLine(@"Время работы встроенного поиска: {0}", resultTime); ;

break;

case 3:

Delete(array);

break;

case 4:

OutArray(array);

break;

case 5:

Console.WriteLine("Работа программы завершена");

break;

default:

Console.WriteLine("Ошибка выбора");

break;

}

} while (select != 5);

}

//Бинарный поиск

static int BinarySearch(List<int> array, int value, int min, int max)

{

if (min > max)

{

return -1;

}

var midArray = (min + max) / 2;

var n = array[midArray];

if (n == value) return midArray;

else

{

if (n > value) return BinarySearch(array, value, min, midArray - 1);

else return BinarySearch(array, value, midArray + 1, max);

}

}

//Добавление элементов в массив

static void Insert(List<int> array)

{

Console.WriteLine("Введите значение для добавления");

int value = int.Parse(Console.ReadLine());

if (array.IndexOf(value) != -1) Console.WriteLine("Данное значение уже в массиве");

else

{

array.Add(value);

Console.WriteLine("Значение добавлено в массив");

}

}

//Удаление элементов из массива

static void Delete(List<int> array)

{

Console.WriteLine("Введите значение для удаления");

int value = int.Parse(Console.ReadLine());

if (array.IndexOf(value) == -1) Console.WriteLine("Данного значения нет массиве");

else

{

array.Remove(value);

Console.WriteLine("Значение удалено из массива");

}

}

//Вывод элементов массива

static void OutArray(List<int> array)

{

Console.WriteLine("Содержимое массива:");

array.ForEach(Console.WriteLine);

}

}

}