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++;
}
}
}
}
