Федеральное агентство связи
Ордена Трудового Красного Знамени
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
Кафедра Математической Кибернетики и Информационных Технологий
Отчет по лабораторной работе
по предмету «СиАОД»
на тему:
«Методы поиска»
Руководитель:
Кутейников И. А.
Москва 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);
}
}
}
