
2392_Смирнова_М_ЛР5
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра АПУ
отчет
по лабораторной работе 5
по дисциплине «Алгоритмы и структуры данных»
ТЕМА: «Алгоритмы поиска»
Студентка гр. 2392 |
|
Смирнова М. В. |
Преподаватель |
|
Ряскова Е. Б. |
Санкт-Петербург
2023
Постановка задачи.
В программе, написанной в лабораторной работе № 4, организовать последовательный поиск определенного элемента в каждом исходном массиве и подсчитать количество совпадений этого элемента в каждом массиве. Организовать бинарный поиск определенного элемента в каждом отсортированном массиве. Меню дополнить следующие пункты:
7 Poisk
7.1 Posledovatel’nyi poisk
7.2 Binarnyi poik
Результаты поиска записать в файл.
Ход решения.

Void Sequential_search: Функция последовательного поиска. При её выполнении просто просматривается множество элементов данных и эти элементы сравниваются с искомыми данными, пока не обнаружится совпадение. В случае совпадения на экран выводится количество совпадений и надпись: «number of matches». В ином случае на экран выводится уведомление о том, что совпадения не найдены.

Void Binary_search: Бинарный поиск состоит в том, что ключ V сравнивается со средним элементом списка. Если эти значения окажутся равными, то искомый элемент найден, в противном случае поиск продолжается в одной из половин списка. В случае совпадения на экран выводится надпись: «Match!». В ином случае на экран выводится уведомление о том, что совпадения не найдены.

Case 7: Добавлен новый пункт меню, а также два подпункта с двумя видами поиска: последовательный и бинарный. От пользователя просят ввести цифру, совпадение с которой ищется в сгенерированных массивах. Далее выбор последовательной или бинарной сортировки, после вывод на экран всех массивов и совпадений (пример работы ниже).
Вывод.
Благодаря проведенной лабораторной, я изучила алгоритмы поиска в массивах (бинарный и последовательный), а также разработала программу для реализации этих алгоритмов.
Результат
работы
Приложение
#include <iostream>
#include <fstream>
using namespace std;
void Random_fill(int*& arr, int size) {
for (int i = 0; i < size; i++) {
arr[i] = rand() % 10;
}
}
void Init_arrays(int*& BUB, int*& INS, int*& MIN, int*& SHL, int*& HOA, int* size) {
cin >> *size;
BUB = new int[*size];
INS = new int[*size];
MIN = new int[*size];
SHL = new int[*size];
HOA = new int[*size];
Random_fill(BUB, *size);
Random_fill(INS, *size);
Random_fill(MIN, *size);
Random_fill(SHL, *size);
Random_fill(HOA, *size);
cout << "Huh, I thought you'd write something cooler than " << *size << endl;
}
void showArray(int* arr, int size) {
for (int i = 0; i < size; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
void PrintInFile(int*& arr, int size, ofstream* printOut) {
for (int i = 0; i < size; i++) {
*printOut << arr[i] << " ";}
*printOut << endl;}
void bubbleSort(int*& BUB, int size) {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size - (i + 1); j++) {
if (BUB[j + 1] < BUB[j]) {
swap(BUB[j + 1], BUB[j]);
}
}
}
cout << "AFTER: " << endl;
showArray(BUB, size);
}
void Min_Sort(int*& MIN, int size) {
int min_idx = 0;
for (int i = 0; i < size - 1; i++) {
min_idx = i;
for (int j = i + 1; j < size; j++) {
if (MIN[j] < MIN[min_idx]) {
min_idx = j;
}
}
swap(MIN[min_idx], MIN[i]);
}
cout << "AFTER: " << endl;
showArray(MIN, size);
}
void Insert_Sort(int*& INS, int size) {
int k = 0;
for (int i = 1; i < size; i++) {
k = i;
while (k > 0 && INS[k - 1] > INS[k]) {
swap(INS[k - 1], INS[k]);
k--;
}
}
cout << "AFTER: " << endl;
showArray(INS, size);
}
void Shell_Sort(int*& SHL, int size) {
for (int s = size / 2; s > 0; s /= 2) {
for (int i = s; i < size; ++i) {
for (int j = i - s; j >= 0 && SHL[j] > SHL[j + s]; j -= s) {
swap(SHL[j], SHL[j + s]);}}}
cout << "AFTER: " << endl;
showArray(SHL, size);}
void Hoare_Sort(int*& HOA, int size, int left, int right) {
int i = left, j = right;
int test = HOA[(left + right) / 2];
do {
while (HOA[i] < test)
i++;
while (HOA[j] > test)
j--;
if (i <= j) {
swap(HOA[i], HOA[j]);
i++; j--;
}
} while (i <= j);
if (i < right)
Hoare_Sort(HOA, size, i, right);
if (j > left)
Hoare_Sort(HOA, size, left, j);
}
void Sequential_search(int* arr, int size, int value, ofstream* printOut) {
bool flag = false;
int counter = 0;
for (int i = 0; i < size; i++) {
if (value == arr[i]) {
flag = true;
counter++;}}
if (flag) {
cout << counter << " - number of matches" << endl;
*printOut << counter << " - number of matches" << endl;}
else {
cout << "No matches." << endl;
*printOut << "No matches." << endl;}}
void Binary_search(int* arr, int size, int value, ofstream* printOut) {
bool flag = false;
int l = 0;
int r = size - 1;
int mid;
while ((l <= r) && (flag != true)) {
mid = (l + r) / 2;
if (arr[mid] == value) {
flag = true;}
if (arr[mid] > value) {
r = mid - 1;}
else {
l = mid + 1;}}
flag ? cout << "Match!" << endl : cout << "No matches." << endl;
flag ? *printOut << "Match!" << endl : *printOut << "No matches." << endl;}
int main() {
ofstream printOut;
printOut.open("output.txt");
int number_menu = 0;
int number_2menu = 0;
int size = 0;
int value = 0;
int* BUB = NULL;
int* INS = NULL;
int* MIN = NULL;
int* SHL = NULL;
int* HOA = NULL;
while (true) {
cout << "1. Initilization arrays" << "\n";
cout << "2. Result of BUBBLE SORT" << "\n";
cout << "3. Result of MIN SORT" << "\n";
cout << "4. Result of INSERT SORT" << "\n";
cout << "5. Result of SHELL SORT" << "\n";
cout << "6. Result of HOARE SORT" << "\n";
cout << "7. SEARCH for element" << "\n";
cout << "8. exit " << "\n";
cin >> number_menu;
switch (number_menu) {
case 1:
system("cls");
cout << "NAME the SIZE of items to be SORTED LATER (please... ^^):" << endl;
Init_arrays(BUB, INS, MIN, SHL, HOA, &size);
system("pause");
system("cls");
break;
case 2:
system("cls");
cout << "BUBBLE SORT:" << endl;
cout << "Elements:" << endl;
cout << "BEFORE:" << endl;
showArray(BUB, size);
bubbleSort(BUB, size);
system("pause");
system("cls");
PrintInFile(BUB, size, &printOut);
break;
case 3:
system("cls");
cout << "MIN SORT: " << endl;
cout << "Elements: " << endl;
cout << "BEFORE:" << endl;
showArray(MIN, size);
Min_Sort(MIN, size);
system("pause");
system("cls");
PrintInFile(MIN, size, &printOut);
break;
case 4:
system("cls");
cout << "INSERT SORT: " << endl;
cout << "Elements: " << endl;
cout << "BEFORE:" << endl;
showArray(INS, size);
Insert_Sort(INS, size);
system("pause");
system("cls");
PrintInFile(INS, size, &printOut);
break;
case 5:
system("cls");
cout << "SHELL SORT: " << endl;
cout << "Elements: " << endl;
cout << "BEFORE:" << endl;
showArray(SHL, size);
Shell_Sort(SHL, size);
system("pause");
system("cls");
PrintInFile(SHL, size, &printOut);
break;
case 6:
system("cls");
cout << "HOARE SORT: " << endl;
cout << "Elements: " << endl;
cout << "BEFORE:" << endl;
showArray(HOA, size);
Hoare_Sort(HOA, size, 0, size - 1);
cout << "AFTER: " << endl;
showArray(HOA, size);
system("pause");
system("cls");
PrintInFile(HOA, size, &printOut);
break;
case 7:
system("cls");
cout << "Search for element you need in random arrays: " << endl;
cout << "Enter the NUMBER YOU WANT TO FIND: " << endl;
cin >> value;
cout << "1. SEQUENTIAL (posledovatelno) search " << endl;
cout << "2. BINARY (binarno) search " << endl;
cin >> number_2menu;
while (true){
switch (number_2menu){
case 1:
system("cls");
cout << "Array Bubble: " << endl;
showArray(BUB, size);
Sequential_search(BUB, size, value, &printOut);
cout << "\n" << "Array Insert: " << endl;
showArray(INS, size);
Sequential_search(INS, size, value, &printOut);
cout << "\n" << "Array Min: " << endl;
showArray(MIN, size);
Sequential_search(MIN, size, value, &printOut);
cout << "\n" << "Array Shell: " << endl;
showArray(SHL, size);
Sequential_search(SHL, size, value, &printOut);
cout << "\n" << "Array Hoare: " << endl;
showArray(HOA, size);
Sequential_search(HOA, size, value, &printOut);
system("pause");
system("cls");
break;
case 2:
system("cls");
cout << "array Bubble: " << endl;
showArray(BUB, size);
Binary_search(BUB, size, value, &printOut);
cout << "\n" << "array Insert: " << endl;
showArray(INS, size);
Binary_search(INS, size, value, &printOut);
cout << "\n" << "array Min: " << endl;
showArray(MIN, size);
Binary_search(MIN, size, value, &printOut);
cout << "\n" << "array Shell: " << endl;
showArray(SHL, size);
Binary_search(SHL, size, value, &printOut);
cout << "\n" << "array Hoare: " << endl;
showArray(HOA, size);
Binary_search(HOA, size, value, &printOut);
system("pause");
system("cls");
break;}
break;}
break;
case 8:
system("cls");
cout << "BYE-BYE!!" << endl;
exit(0);
break;}}
delete[] BUB;
delete[] INS;
delete[] MIN;
delete[] SHL;
delete[] HOA;}