
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра ЭПУ
отчет
по лабораторной работе №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;
}
Листинг результатов:
Линейный поиск:
Рисунок 3 – результат работы алгоритма линейного поиска
Бинарный поиск
Рисунок 4 - результат работы алгоритма бинарного поиска
Выводы: написаны программы, выведены результаты.