Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Болтушкин Л.С., группа 712-2, практика 2.docx
Скачиваний:
9
Добавлен:
04.10.2024
Размер:
122.83 Кб
Скачать

1.3 Сортировка вставками

Для оценки алгоритмической сложности сортировки вставками были построены графики зависимости времени от длины массива (рисунок 1.5) и зависимости количества операций от длины массива (рисунок 1.6).

Рисунок 1.5 - Зависимость времени от длины массива

Рисунок 1.6 - Зависимость количества операций от длины массива

Как видно из рисунка 1.6 алгоритмическая сложность находится между O(n^2) и O(n*log(n)). Это соответствует теоретическим данным.

В приложении В представлен листинг программы сортировки вставками.

1.4 Анализ таблицы

В таблице 1.1 представлено время лучших и худших случаев для сортировок.

Таблица 1.1 – Лучший и худший случаи для сортировок

100

элементов

Сортировка

«расческой»

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

Сортировка

вставками

Лучший случай

Худший случай

Лучший случай

Худший случай

Лучший случай

Худший случай

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

3182

3427

1019

1549

4672

6318

Время(мкс)

11,7

19,7

6,8

7,6

4,9

11,2

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

Заключение

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

Приложение а

(Расчёска)

using System;

using System.Diagnostics;

class Program

{

static void Main(string[] args)

{

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

foreach (int length in lengths)

{

Console.WriteLine($"Comb Sort for an array of length {length}");

int[] arr = GenerateRandomArray(length);

Console.WriteLine("Original array:");

PrintArray(arr);

Stopwatch stopwatch = new Stopwatch();

stopwatch.Start();

int comparisons = 0;

int swaps = 0;

CombSort(arr, ref comparisons, ref swaps);

stopwatch.Stop();

Console.WriteLine("Sorted array:");

PrintArray(arr);

int totalOperations = comparisons + swaps;

Console.WriteLine($"Total operations: {totalOperations}");

Console.WriteLine($"Execution time: {stopwatch.Elapsed.TotalMilliseconds} ms");

Console.WriteLine();

}

Console.ReadLine();

}

public static int[] GenerateRandomArray(int length)

{

int[] arr = new int[length];

Random rand = new Random();

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

{

arr[i] = rand.Next(20, 100);

}

return arr;

}

public static void PrintArray(int[] arr)

{

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

{

Console.WriteLine($"Element at index {i}: {arr[i]}");

}

}

public static void CombSort(int[] arr, ref int comparisons, ref int swaps)

{

double shrink = arr.Length / 1.247;

bool swapped = true;

while (shrink > 1 || swapped)

{

shrink /= 1.247;

int i = 0;

if (shrink < 1)

{

shrink = 1;

}

swapped = false;

int gap = Convert.ToInt32(shrink);

while (i + gap < arr.Length)

{

int j = i + gap;

if (arr[i] > arr[j])

{

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

swapped = true;

swaps++;

}

comparisons++;

i++;

}

}

}

}