Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2392_Смирнова_М_ЛР4

.docx
Скачиваний:
0
Добавлен:
05.12.2024
Размер:
1.33 Mб
Скачать

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

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

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

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

Кафедра АПУ

отчет

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

по дисциплине «Алгоритмы и структуры данных»

ТЕМА: «Алгоритмы методов сортировки»

Студентка гр. 2392

Смирнова М. В.

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

Ряскова Е. Б.

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

2023

Постановка задачи.

Разработать программу для создания пяти динамических массивов: a[ ], b[ ], c[ ], d[ ] и e[ ]. Эти массивы необходимо отсортировать соответственно методом обмена, методом выбора, методом вставки, методом Шелла и методом Хоора. Разработать в программе меню, структура которого следующая:

Menu:

1. Initilization arrays (инициализация массивов)

2. Result of bubble sort

3. Result of min sort

4. Result of insert sort

5. Result of Shell sort

6. Result of Hoor sort

Результаты всех сортировок записать в файл

Ход решения.

Void Random_fill: функция заполнения массива случайными числами с помощью генератора случайных чисел rand().


Void Init_arrays: функция инициализации пяти массивов. Просим от пользователя размер массива, далее функций Random_fill заполняем все массивы случайными значениями.

Void Show_array: функция вывода на экран массива проходится по всем элементами массива и выводит на экран.


Void Print_in_file: функция, что записывает все введенные элементы массива.

Void Bubble_Sort: Функция, которая реализует пузырьковую сортировку.



Void Min_Sort: Функция, которая сортирует массив методом выбора.

Void Insert_Sort: Функция, осуществляющая сортировку методом вставки


Void Shell_Sort: Функция, используй метод Шелла в качестве сортировки


Void Hoare_Sort: Функция, выполняющая сортировку методом Хоора.

Int main: Открываем файл. Вводим необходимые переменные для меню и массивов. Далее с помощью цикла while выводим на экран меню, состоящий из 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);}

int main(){

ofstream printOut;

printOut.open("output.txt");

int number_menu = 0;

int size = 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. 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);

printOut.close();

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);

printOut.close();

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);

printOut.close();

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);

printOut.close();

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);

printOut.close();

break;

case 7:

system("cls");

cout << "BYE-BYE!!" << endl;

exit(0);

break;}}

delete[] BUB;

delete[] INS;

delete[] MIN;

delete[] SHL;

delete[] HOA;}