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

Графики

Кол-во, N

Пузырьковая, мс

Быстрая, мс

100

104

21

200

420

43

300

996

69

400

1770

92

500

2784

120

600

4098

146

700

5410

174

800

7320

195

900

9198

229

Рисунок 2. Таблица временной сложности

Графики сравнение сложности (рис. 4) и отдельный график для Быстрой сортировки (рис. 5)

Рисунок 3. Графики сложности

Рисунок 4. График сложности Быстрой сортировки

На рисунке оранжевым цветом отмечен алгоритм Пузырьковой сортировки, синим — Быстрая (рис. 4). Согласно информации с графика, алгоритм пузырьковой сортировки медленнее алгоритма быстрой сортировки. Также стоит отметить, что алгоритм пузырьковой сильнее замедляется с увеличением размерности строки. Быстрая сортировка замедляется не так критично (рис. 5). В связи с этим можно сказать, что алгоритм быстрой сортировки в среднестатистической ситуации, когда числовое содержание массива может быть любым, предпочтительнее благодаря своей более низкой сложности.

Вывод

В ходе проведенной лабораторной работы была достигнута цель изучения и практического сравнения эффективности алгоритмов сортировки. Реализация и тестирование различных сортировок позволило подтвердить теоретические оценки их временной сложности.

Приложение

main.cpp:

#include <iostream>

#include <cstdlib>

#include <ctime>

#include <chrono>

#include <locale.h>

#include "function.h"

using namespace std;

using namespace std::chrono;

int main() {

setlocale(LC_ALL, "Russian");

srand(time(0));

// Создаем и заполняем исходный массив

int r[N];

int A = 0;

int B = 1000;

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

r[i] = rand() % (B - A + 1) + A;

}

int arr1[N], arr2[N];

cout << "Исходный массив: ";

printArray(r, N);

// Тестируем сортировку пузырьком

copyArray(r, arr1, N);

auto start = high_resolution_clock::now();

bubbleSort(arr1, N);

auto stop = high_resolution_clock::now();

auto duration = duration_cast<microseconds>(stop - start);

cout << "\nВремя сортировки пузырьком: " << duration.count() << " микросекунд" << endl;

cout << "Результат: ";

printArray(arr1, N);

// Тестируем быструю сортировку

copyArray(r, arr2, N);

start = high_resolution_clock::now();

quickSort(arr2, N - 1);

stop = high_resolution_clock::now();

duration = duration_cast<microseconds>(stop - start);

cout << "\nВремя быстрой сортировки: " << duration.count() << " микросекунд" << endl;

cout << "Результат: ";

printArray(arr2, N);

return 0;

}

Function.h:

#ifndef FUNCTION_H

#define FUNCTION_H

const int N = 300; // размер массива

void Swap(int *pa, int *pb);

void bubbleSort(int arr[], int n);

int compareAsc(int a, int b);

int compareDesc(int a, int b);

void quickSort(int arr[], int dim);

void copyArray(int source[], int dest[], int n);

void printArray(int arr[], int n);

#endif

Function.cpp:

#include <iostream>

#include "function.h"

using namespace std;

void Swap(int *pa, int *pb) {

int t = *pa;

*pa = *pb;

*pb = t;

}

void bubbleSort(int arr[], int n) {

int m = n;

bool flag;

do {

flag = false;

m--;

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

if (arr[i] > arr[i + 1]) {

Swap(&arr[i], &arr[i + 1]);

flag = true;

}

}

} while (flag);

}

int compareAsc(int a, int b) {

return (a - b);

}

int compareDesc(int a, int b) {

return (b - a);

}

void quickSort(int arr[], int dim) {

int i = 0, j = dim;

int x = arr[dim >> 1];

do {

while (arr[i] < x) i++;

while (arr[j] > x) j--;

if (i <= j) {

Swap(&arr[i], &arr[j]);

i++;

j--;

}

} while (i <= j);

if (j > 0) quickSort(arr, j);

if (i < dim) quickSort(arr + i, dim - i);

}

void copyArray(int source[], int dest[], int n) {

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

dest[i] = source[i];

}

}

void printArray(int arr[], int n) {

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

cout << arr[i] << " ";

}

cout << endl;

}