- •Задание
- •Введение
- •Целью данной работы является изучение и практическая реализация различных алгоритмов сортировки, таких как сортировка расческой, быстрая сортировка и сортировка выбором, на языке программирования C#.
- •1 ХОД РАБОТЫ
- •1.1 Сортировка расческой
- •1.2 Быстрая сортировка
- •1.3 Сортировка выбором
- •2 АЛГОРИТМИЧЕСКАЯ СЛОЖНОСТЬ
- •Приложение А
- •Приложение Б
- •Приложение В
2 АЛГОРИТМИЧЕСКАЯ СЛОЖНОСТЬ
Алгоритм |
Структура |
Временная сложность |
||
|
данных |
Лучшее |
В среднем |
В худшем |
Сортировка |
Массив |
O(n log(n)) |
O(n^2 / 2^F) |
O(n^2) |
расческой |
|
|
|
|
Быстрая |
Массив |
O(n log(n)) |
O(n log(n)) |
O(n^2) |
сортировка |
|
|
|
|
Сортировка |
Массив |
O(n^2) |
O(n^2) |
O(n^2) |
выбором |
|
|
|
|
9
Приложение А
(Обязательное) Сортировка расческой
using System; |
|||
class Program |
|||
{ |
static void FillArray(float[] array, int length) |
||
|
|||
|
{ |
Random r = new Random(); |
|
|
|
||
|
|
for (int i = 0; i < length; i++) |
|
|
|
{ |
array[i] = r.NextSingle() * (-1); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
static void PrintArray(float[] arr, int n) |
||
|
{ |
for (int i = 0; i < n; i++) |
|
|
|
||
|
|
{ |
Console.Write($"{arr[i]} "); |
|
|
} |
|
|
|
|
|
|
|
Console.WriteLine(); |
|
}
static void rascheska(float[] array, int length)
{double factor = 1.2473309; int step = length - 1; while (step >= 1)
{for (int i = 0; i + step < length; i++)
{if (array[i] > array[i + step])
{
float temp = array[i]; array[i] = array[i + step]; array[i + step] = temp;
|
|
} |
} |
|
|
|
|
|
} |
step = Convert.ToInt32(Math.Floor(step / factor)); |
|
} |
|
|
|
|
|
|
|
static void Main() |
|||
{int n = 20;
float[] arr = new float[n]; FillArray(arr, n);
Console.WriteLine("Несортированный массив"); PrintArray(arr, n);
Console.WriteLine(); Console.WriteLine("Отсортированный массив"); rascheska(arr, n);
}} PrintArray(arr, n);
13
Приложение Б
(Обязательное) Быстрая сортировка
void quickSort(float[] a, int l, int r)
{float temp; int i = l; int j = r;
float x = a[(l + r) / 2]; while (i <= j)
{while (a[i] < x) i++; while (a[j] > x) j--; if (i <= j)
{temp = a[i]; a[i] = a[j]; a[j] = temp; i++;
j--;
|
} |
} |
|
|
|
|
if (i < r) |
|
|
|
quickSort(a, i, r); |
|
if (l < j) |
|
} |
|
quickSort(a, l, j); |
|
|
|
void FillArray(float[] array, int length)
{
Random r = new Random();
for (int i = 0; i < length; i++)
{ array[i] = r.NextSingle() * (-1);
}}
void PrintArray(float[] arr, int n) |
||
{ |
for (int i = 0; i < n; i++) |
|
|
||
|
{ |
Console.Write($"{arr[i]} "); |
|
} |
|
|
|
|
} |
Console.WriteLine(); |
|
|
|
|
int n = 20;
float[] arr = new float[n]; FillArray(arr, n);
Console.WriteLine("Несортированный массив"); PrintArray(arr, n);
Console.WriteLine();
11
Console.WriteLine("Отсортированный массив"); quickSort(arr, 0, n — 1);
PrintArray(arr, n);
13
