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

СД Практика 2

.pdf
Скачиваний:
3
Добавлен:
17.06.2025
Размер:
465 Кб
Скачать
☆

Из графического отображения полученных данных можно увидеть, что график лежит между эталонными, что подтверждает теорию.

11

3 Рассмотрение худших и лучших вариантов

После постройки графиков были проведены исследования на худший и лучший случай для каждой сортировки на массиве из 100 элементов, было проведено по 5 экспериментов для каждой и высчитано среднее значение тактов. Результаты исследования представлены в Таблице 3.1.

Таблица 3.1 – Результаты исследования

 

Сортировка

Быстрая

Сортировка

 

«расческой»

сортировка

вставками

 

 

 

 

 

 

 

 

Лучший

Худший

Лучший

Худший

Лучший

Худший

 

 

 

 

 

 

 

Число операций

1233

1339

669

722

99

5049

 

 

 

 

 

 

 

Время (в мс)

0,0207

0,0278

0,0178

0,0182

0,0111

0,0439

 

 

 

 

 

 

 

Анализируя данную таблицу, можно сделать вывод, что в худшем случае быстрая сортировка показывает лучший результат, а в лучшем случае самый быстрый результат показывает сортировка вставками.

12

Заключение

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

13

Приложение А Сортировка расческой

try

{

Stopwatch Timer = new Stopwatch();

int[] n = new int[] { 1, 2, 3, 4, 5, 10, 15, 20, 25, 30, 40, 50, 75, 100, 150, 200, 250, 300, 400, 500, 600, 800, 1000 };

for (int i = 0; i < n.Length; i++)

{

int[] arr = new int[n[i]]; Random random = new Random();

for (int j = 0; j < arr.Length; j++)

{

arr[j] = random.Next(0, 1000000); if (j % 2 == 0)

{

arr[j] = arr[j] * -1;

}

}

Timer.Start();

double factor = 1.2473309; int step = n[i] - 1;

int action = 0; while (step >= 1)

{

for (int j = 0; j + step < n[i]; j++)

{

if (arr[j] > arr[j + step])

{

int temp = Convert.ToInt32(arr[i]);

14

arr[j] = arr[j + step];

arr[j + step] = temp;

action++;

}

action++;

}

step = Convert.ToInt32(Math.Floor(step / factor));

}

Timer.Stop();

Console.Write($"Длина массива: {n[i]}; Время: {Timer.ElapsedTicks}; Количество операций: {action}");

Console.WriteLine();

}

}

catch (Exception)

{

Console.WriteLine("Что-то пошло не так :(");

}

15

Приложение Б Быстрая сортировка

try

{

Stopwatch Timer = new Stopwatch(); int action = 0;

int[] n = new int[] { 1, 2, 3, 4, 5, 10, 15, 20, 25, 30, 40, 50, 75, 100, 150, 200, 250, 300, 400, 500, 600, 800, 1000 };

for (int i = 0; i < n.Length; i++)

{

int[] arr = new int[n[i]]; Random random = new Random();

for (int j = 0; j < arr.Length; j++)

{

arr[j] = random.Next(0, 1000000); if (j % 2 == 0)

{

arr[j] = arr[j] * -1;

}

}

void quick_sorting(int[] arr, int l, int r)

{

int temp;

int x = arr[l + (r - l) / 2]; int i = l;

int j = r; while (i <= j)

{

while (arr[i] < x) i++; while (arr[j] > x) j--;

16

if (i <= j)

{

temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; action++;

i++; j--;

}

}

if (i < r)

{

quick_sorting(arr, i, r);

}

if (l < j)

{

quick_sorting(arr, l, j);

}

}

Timer.Start(); quick_sorting(arr, 0, n[i] - 1); Timer.Stop();

Console.Write($"Длина массива: {n[i]}; Время: {Timer.ElapsedTicks}; Количество операций: {action}");

Console.WriteLine();

}

}

catch (Exception)

{

17

Console.WriteLine("Что-то пошло не так :(");

}

18

Приложение В Сортировка вставками

try

{

Stopwatch Timer = new Stopwatch(); int action = 0;

int[] n = new int[] { 1, 2, 3, 4, 5, 10, 15, 20, 25, 30, 40, 50, 75, 100, 150, 200, 250, 300, 400, 500, 600, 800, 1000 };

for (int i = 0; i < n.Length; i++)

{

int[] arr = new int[n[i]]; Random random = new Random();

for (int j = 0; j < arr.Length; j++)

{

arr[j] = random.Next(0, 1000000); if (j % 2 == 0)

{

arr[j] = arr[j] * -1;

}

}

Timer.Start();

for (int j = 1; j < n[i]; j++)

{

int x = arr[j]; int l = i;

while (l > 0 && (x < arr[l - 1]))

{

arr[l] = arr[l - 1]; l--;

action++;

19

}

arr[l] = x; action++;

}

Timer.Stop();

Console.Write($"Длина массива: {n[i]}; Время: {Timer.ElapsedTicks}; Количество операций: {action}");

Console.WriteLine();

}

}

catch(Exception)

{

Console.WriteLine("Что-то пошло не так :(");

}

20

Соседние файлы в предмете Структуры данных