Добавлен: 23.11.2023
Просмотров: 117
Скачиваний: 5
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНОБРНАУКИ РОССИИСанкт-Петербургский государственныйэлектротехнический университет«ЛЭТИ» им. В.И. Ульянова (Ленина)Кафедра Информационной безопасностиотчетпо лабораторной работе №1по дисциплине «Алгоритмы и структуры данных»Тема: Методы сортировки
Санкт-Петербург2021
Алгоритм быстрой сортировки включает в себя два основных этапа:
На приведенной ниже диаграмме представлена зависимость времени сортировки от количества элементов сортируемого массива.Рисунок 6.1 – Зависимость времени от количества элементовВ таблице, приведенной ниже, представлена сложность выполнения алгоритма, для лучшего, среднего и наихудшего случая.Таблица 6.2 – Сложность алгоритма
#include
#include
#include
#include
using namespace std;
void FillingTheMas(vector& mas)
{
for (size_t i = 0; i < mas.size(); i++)
{
mas[i] = static_cast(rand() % 100);
cout << mas[i] << " ";
}
cout << endl;
}
float Quicksort(vector& mas, int first, int last)
{
clock_t start = clock();
int mid = 0;
int f = first;
int l = last;
mid = mas[(f + l) / 2];
do
{
while (mas[f] < mid) f++;
while (mas[l] > mid) l--;
if (f <= l)
{
swap(mas[f], mas[l]);
f++;
l--;
}
} while (f < l);
if (first < l) Quicksort(mas, first, l);
if (f < last) Quicksort(mas, f, last);
return (float)(clock() - start) / CLOCKS_PER_SEC;
}
int main()
{
setlocale(LC_ALL, "Russian");
cout << "Леонова Мария, группа 0361, представляю программу, реализующую метод Хоара." << endl;
cout << "В конце программа выведет время, за которое была совершена сортировка (в секундах)." << endl;
cout << endl;
Sleep(3000);
int U;
cout << "Введите количество элементов массива (это должно быть положительное и целое число): ";
while (!(cin >> U) || U <= 0)
{
cin.clear();
cin.ignore(100, '\n');
cout << endl;
cout << "Ошибка! Попробуйте ввести заново: ";
}
cout << endl;
vector mas;
mas.reserve(U);
for (int i = 0; i < U; i++) mas.push_back(0);
srand(time(0));
cout << "Сортировка для массива из " << U << " элементов (неупорядоченный): " << endl;
cout << endl;
Sleep(4000);
FillingTheMas(mas);
cout << endl;
cout << "Сортировка для массива из " << U << " элементов (упорядоченный): " << endl;
cout << endl;
Sleep(4000);
float time = Quicksort(mas, 0, mas.size() - 1);
for (int i = 0; i < mas.size(); i++) cout << mas[i] << " ";
cout << endl;
cout << endl;
cout << "Время сортировки = " << time << " секунд" << endl;
Sleep(3000);
mas.clear();
cin.ignore();
}
| Студент гр. 0361 | | Леонова М.А. |
| Преподаватель | | Краснов С.А. |
-
Цель работы
-
Задание на лабораторную работу:
-
Теоретические сведения
Алгоритм быстрой сортировки включает в себя два основных этапа:
-
разбиение массива относительно опорного элемента; -
рекурсивная сортировка каждой части массива.
-
Блок-схема алгоритма
-
Результаты выполнения программы
-
Результаты выполнения работы
| Метод сортировки | Количество элементов | Время сортировки (сек) |
| Метод Хоара | 1900 | 0,001 |
| 2700 | 0,002 | |
| 8000 | 0,008 |
На приведенной ниже диаграмме представлена зависимость времени сортировки от количества элементов сортируемого массива.Рисунок 6.1 – Зависимость времени от количества элементовВ таблице, приведенной ниже, представлена сложность выполнения алгоритма, для лучшего, среднего и наихудшего случая.Таблица 6.2 – Сложность алгоритма
| Лучший случай | Средний случай | Наихудший случай |
| | |
-
Выводы по работе
-
были изучены методы сортировки; -
написана программа, реализующая быструю сортировку, т.е. метод Хоара
#include
#include
#include
#include
using namespace std;
void FillingTheMas(vector
{
for (size_t i = 0; i < mas.size(); i++)
{
mas[i] = static_cast
cout << mas[i] << " ";
}
cout << endl;
}
float Quicksort(vector
{
clock_t start = clock();
int mid = 0;
int f = first;
int l = last;
mid = mas[(f + l) / 2];
do
{
while (mas[f] < mid) f++;
while (mas[l] > mid) l--;
if (f <= l)
{
swap(mas[f], mas[l]);
f++;
l--;
}
} while (f < l);
if (first < l) Quicksort(mas, first, l);
if (f < last) Quicksort(mas, f, last);
return (float)(clock() - start) / CLOCKS_PER_SEC;
}
int main()
{
setlocale(LC_ALL, "Russian");
cout << "Леонова Мария, группа 0361, представляю программу, реализующую метод Хоара." << endl;
cout << "В конце программа выведет время, за которое была совершена сортировка (в секундах)." << endl;
cout << endl;
Sleep(3000);
int U;
cout << "Введите количество элементов массива (это должно быть положительное и целое число): ";
while (!(cin >> U) || U <= 0)
{
cin.clear();
cin.ignore(100, '\n');
cout << endl;
cout << "Ошибка! Попробуйте ввести заново: ";
}
cout << endl;
vector
mas.reserve(U);
for (int i = 0; i < U; i++) mas.push_back(0);
srand(time(0));
cout << "Сортировка для массива из " << U << " элементов (неупорядоченный): " << endl;
cout << endl;
Sleep(4000);
FillingTheMas(mas);
cout << endl;
cout << "Сортировка для массива из " << U << " элементов (упорядоченный): " << endl;
cout << endl;
Sleep(4000);
float time = Quicksort(mas, 0, mas.size() - 1);
for (int i = 0; i < mas.size(); i++) cout << mas[i] << " ";
cout << endl;
cout << endl;
cout << "Время сортировки = " << time << " секунд" << endl;
Sleep(3000);
mas.clear();
cin.ignore();
}