Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практики / ПР1 / СД_П1

.odt
Скачиваний:
0
Добавлен:
27.06.2025
Размер:
181.5 Кб
Скачать

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра безопасности информационных систем (БИС)

СОРТИРОВКИ МАССИВОВ

Отчет по практической работе №1

по дисциплине «Структуры данных»

Студент гр. 733-1

_______ Сметанников Д.Е

_______

Принял:

преподаватель КИБЭВС

_______ Д.Р. Уразаев

_______

Задание

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

Не используйте дополнительные массивы при реализации всех сортировок.

Размер массива выбирайте в диапазоне 20-100 элементов.

Вариант 3 .Третья сортировка - сортировка обменом. Входные данные представлены только отрицательными числами с плавающей точкой (использовать float).

Содержание

Задание 2

1 Введение 4

2 Ход работы 5

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

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

2.3 Сортировка обменом 6

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

Заключение 10

Приложение А 11

Приложение Б 13

Приложение В 15

  1. Введение

Целью данной работы является изучение и практическая реализация различных алгоритмов сортировки, таких как сортировка расческой, быстрая сортировка и сортировка обменом (пузырьком), на языке программирования C#.

  1. Ход работы

1

2

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

Сортировка расческой — это улучшенная версия пузырьковой сортировки. Вместо того, чтобы сравнивать только соседние элементы, этот алгоритм начинает с большого шага между элементами, который постепенно уменьшается. Шаг сравнения изначально большой, а затем уменьшается до 1 (как при пузырьковой сортировке). Это помогает быстрее перемещать большие и маленькие элементы к их правильным местам.

На рисунке 2.1 представлен результат работы программы.

Рисунок 2.1 – Сортировка расческой

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

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

Быстрая сортировка — это эффективный алгоритм сортировки, который работает, выбирая опорный элемент (пивот) и разделяя массив на две части: те, что меньше пивота, и те, что больше. Затем она рекурсивно сортирует эти две части.

На рисунке 2.2 представлен результат работы программы.

Рисунок 2.2 – Быстрая сортировка

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

2.3Сортировка обменом

Сортировка обменом — это способ упорядочить числа, сравнивая каждую пару соседних элементов и меняя их местами, если они стоят не в том порядке. Так большие числа постепенно "всплывают" наверх, как пузырьки в воде.

На рисунке 2.3 представлена блок-схема алгоритма сортировки обменом.

Р исунок 2.3 – Блок-схема сортировки обменом

На рисунке 2.4 представлен результат работы программы.

Рисунок 2.4 – Сортировка обменом

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

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

Алгоритм

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

Временная сложность

Вспомогательные данные

Лучшее

В среднем

В худшем

В худшем

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

Массив

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 — Сравнение алгоритмической сложности алгоритмов

Заключение

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

Наиболее затруднительным было выполнение быстрой сортировки.

Приложение А

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

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

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;

}

}

step = (int)(step / factor);

}

Console.WriteLine("сортировка расческой:");

foreach (var item in arr)

{

Console.Write($"{item:f2}" + " ");

}

Приложение Б

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

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

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);

}

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

}

Приложение В

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

Сортировка обменом

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;

}

}

if (!swapped)

break;

}

Console.WriteLine("Сортировка обменом:");

foreach (var item in arr)

{

Console.Write($"{item:F2} ");

}

Томск 2024

Соседние файлы в папке ПР1