Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практики(Вариант №1) / Практическая работа №2.odt
Скачиваний:
0
Добавлен:
23.02.2026
Размер:
292.66 Кб
Скачать

    2 Алгоритмическая сложность

Алгоритм

Структура данных

Кол-во операций

Время

В лучшем

В худшем

В лучшем

В худшем

Сортировка расческой

Массив

1233

1339

0.06

0.010

Быстрая сортировка

Массив

606

706

0.239

0.192

Сортировка выбором

Массив

4950

5000

0.01

0.010

Таблица 1 — Сравнение средних значений алгоритмов

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

Заключение

В ходе выполнения практической работы было выявлено, что быстрая сортировка имеет наилучшую производительность O(n*logn)) и эффективна для любых размеров массива. Сортировка выбором O(n^2) крайне неэффективна для больших массивов. Сортировка расческой близка к O(n*log⁡n), но уступает быстрой по скорости.

Приложение а

(обязательное)

Сортировка расческой

using System;

using System.Diagnostics;

class Program

{

static void Main()

{

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

Console.WriteLine("Размер\tВремя (мс)\tСравнения\tПерестановки\tВсего операций");

Console.WriteLine(new string('-', 60));

foreach (int size in sizes)

{

int[] arr = new int[size];

Random random = new Random();

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

{

arr[i] = -random.Next(1, 1000001); // от -1000000 до -1

}

int[] arrCopy = (int[])arr.Clone();

long comparisons = 0;

long swaps = 0;

Stopwatch stopwatch = new Stopwatch();

stopwatch.Start();

// Реализация сортировки расческой (comb sort)

int n = arrCopy.Length;

double factor = 1.2473309;

int step = n - 1;

while (step >= 1)

{

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

{

comparisons++; // счетчик сравнений

if (arrCopy[i] > arrCopy[i + step])

{

swaps++; // счетчик перестановок

int temp = arrCopy[i];

arrCopy[i] = arrCopy[i + step];

arrCopy[i + step] = temp;

}

}

step = (int)(step / factor);

}

stopwatch.Stop();

// Проверка корректности сортировки

bool isSorted = true;

for (int i = 0; i < n - 1; i++)

{

if (arrCopy[i] > arrCopy[i + 1])

{

isSorted = false;

break;

}

}

Console.WriteLine($"{size}\t{stopwatch.Elapsed.TotalMilliseconds:F6}\t{comparisons}\t\t{swaps}\t\t{comparisons + swaps}" +

(isSorted ? "" : " (НЕ ОТСОРТИРОВАНО)"));

}

}

}

Соседние файлы в папке Практики(Вариант №1)