Скачиваний:
0
Добавлен:
04.01.2025
Размер:
87.69 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра ЭПУ

отчет

по лабораторной работе №4

по дисциплине «Информационные технологии»

Тема: «Алгоритмы линейного и бинарного поиска»

Студент гр. 1205

Агеев А.А.

Преподаватель

Ларионов И. А.

Санкт-Петербург 2022

Цель работы: решить задачи по реализации линейного и бинарного поиска, проверить корректность результатов работы программы.

Блок-схемы:

Рисунок 1 – блок-схема алгоритма простого поиска

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

1) Линейный поиск #include <iostream>

#include <algorithm>

using namespace std;

int main() {

setlocale(LC_ALL, "Russian");

int N = 20; // размерность

int key;

int* A = new int[N];

int* answer = new int[N]; //массив индексов

int index = 0;

cout << "Массив: ";

for (int i = 0; i < N; i++) {

A[i] = rand() % 20;

cout << A[i] << " ";

}

cout << endl << "Введите значение в диапазоне от 0 до 20:";

cin >> key;

if (key < 0 || key > 20) cout << "Неверно введено значение" << endl;

else {

for (int i = 0; i < N; i++) {

if (A[i] == key) {

answer[index] = i;

index++;

}

}

}

cout << "Количество исходных элементов в исходном массиве " << index << endl;

cout << "Массив индексов: ";

for (int i = 0; i < index; i++) {

cout << answer[i] << " ";

}

return 0;

}

2) Бинарный поиск

#include <iostream>

#include <algorithm>

using namespace std;

int binarySearch(int N, int key, int* A, int from) {

int l = from;

int r = N - 1;

int mid = 0;

while (l <= r) {

mid = (l + r) / 2;

if (A[mid] == key) return mid;

if (A[mid] > key) r = mid - 1;

else l = mid + 1;

}

if (A[mid != key]) return -1;

else return mid;

}

int main() {

setlocale(LC_ALL, "Russian");

int N; //размерность

int key;

cout << "Введите размерность массива: ";

cin >> N;

int* A = new int[N];

int* answer = new int[N]; //массив индексов

int index = 0;

int from, to;

cout << endl << "Введите диапазон значений от: ";

cin >> from;

cout << "до: ";

cin >> to;

cout << "Массив: ";

for (int i = 0; i < N; i++) {

A[i] = rand() % to + from;

cout << A[i] << " ";

}

bool flag;

//BubbleSort

for (int i = 0; i < N; i++) {

flag = true;

for (int j = 0; j < N - (i + 1); j++) {

if (A[j] > A[j + 1]) {

flag = false;

swap(A[j], A[j + 1]);

}

}

if (flag) break;

}

cout << endl << "Отсортированный массив: ";

for (int i = 0; i < N; i++) cout << A[i] << " ";

cout << endl << "Введите значение в диапазоне от " << from << " до " << to << " : ";

cin >> key;

int fromA = 0;

flag = false;

while (binarySearch(N, key, A, fromA) != -1) {

flag = true;

int ind = binarySearch(N, key, A, fromA);

answer[index] = from + ind;

index++;

fromA += ind + 1;

}

if (flag == true) {

cout << "Количество исходных элементво в исходном массиве: " << index << endl;

cout << "Массив индексов: ";

for (int i = 0; i < index; i++) {

cout << answer[i] << " ";

}

}

else cout << "Нет такого элемента";

return 0;

}

Листинг результатов:

  1. Линейный поиск:

Рисунок 3 – результат работы алгоритма линейного поиска

  1. Бинарный поиск

Рисунок 4 - результат работы алгоритма бинарного поиска

Выводы: написаны программы, выведены результаты.

Соседние файлы в папке Лабы