

|
2 |
Алгоритмическая сложность |
|
||
|
|
|
|
||
Алгоритм |
Структура |
Временная сложность |
Вспомогате |
||
|
данных |
|
|
|
льные |
|
|
|
|
|
данные |
|
|
|
|
|
|
|
|
Лучшее |
В среднем |
В худшем |
В худшем |
|
|
|
|
|
|
Сортировка |
Массив |
O(n log(n)) |
Ω(n^2 / 2^F) |
O(n^2) |
O(1) |
расческой |
|
|
|
|
|
|
|
|
|
|
|
Быстрая |
Массив |
O(n log(n)) |
O(n log(n)) |
O(n^2) |
O(n) |
сортировка |
|
|
|
|
|
|
|
|
|
|
|
Пузырькова |
Массив |
O(n) |
O(n^2) |
O(n^2) |
O(1) |
я |
|
|
|
|
|
сортировка |
|
|
|
|
|
Таблица 1 — Сравнение алгоритмической сложности алгоритмов
9
Заключение
В ходе выполнения практической работы были успешно реализованы и протестированы три алгоритма сортировки: сортировка расческой, быстрая сортировка и сортировка обменом.
Наиболее затруднительным было выполнение быстрой сортировки.
10
Приложение А (обязательное)
Сортировка расческой
float[] arr = new float[25]; Random random = new Random(); for (int i = 0; i < arr.Length; i++)
{
arr[i] = (float)(random.NextDouble() * -100);
}
Console.WriteLine("Исходный массив:"); foreach (var item in arr)
{
Console.Write($"{item:F2}" + " ");
}
int n = arr.Length;
double factor = 1.2473309; int step = n - 1;
while (step >= 1)
{
for (int i = 0; i + step < n; i++)
{
if (arr[i] > arr[i + step])
{
float temp = arr[i]; arr[i] = arr[i + step]; arr[i + step] = temp;
}
}
11
step = (int)(step / factor);
}
Console.WriteLine("сортировка расческой:"); foreach (var item in arr)
{
Console.Write($"{item:f2}" + " ");
}
12
Приложение Б (обязательное)
Быстрая сортировка static void quicksort(float[] arr, int l, int r)
{
int i = l; int j = r;
float pivot = arr[l + (r - l) / 2]; while (i <= j)
{
while (arr[i] < pivot) i++; while (arr[j] > pivot) j--; if (i <= j)
{
float temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; i++; j--;
}
}
if (i < r) { quicksort(arr, i, r); } if (l < j) { quicksort(arr, l, j); }
}
float[] arr = new float[25]; Random random = new Random(); for (int i = 0; i < arr.Length; i++)
{
arr[i] = (float)(random.NextDouble() * -100);
}
13
Console.WriteLine("Исходный массив:"); foreach (var item in arr)
{
Console.Write($"{item:F2}" + " ");
}
float[] arr = new float[25]; Random random = new Random(); for (int i = 0; i < arr.Length; i++)
{
arr[i] = (float)(random.NextDouble() * -100);
}
Console.WriteLine("Исходный массив:"); foreach (var item in arr)
{
Console.Write($"{item:F2}" + " ");
}
Console.WriteLine(); quicksort(arr, 0, arr.Length - 1);
Console.WriteLine("Быстрая сортировка:"); foreach (var item in arr)
{
Console.Write($"{item:F2}" + " ");
}
14
Приложение В (обязательное)
Сортировка обменом
float[] arr = new float[25]; Random random = new Random(); for (int i = 0; i < arr.Length; i++)
{
arr[i] = (float)(random.NextDouble() * -100);
}
Console.WriteLine("Исходный массив:"); foreach (var item in arr)
{
Console.Write($"{item:F2}" + " ");
}
int k = arr.Length; bool swapped;
for (int i = 0; i < k - 1; i++)
{
swapped = false;
for (int j = 0; j < k - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
float temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; swapped = true;
}
}
15
if (!swapped) break;
}
Console.WriteLine("Сортировка обменом:"); foreach (var item in arr)
{
Console.Write($"{item:F2} ");
}
16