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

Практики(Вариант №7) / Практическая работа №1

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

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

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

Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)

СОРТИРОВКИ МАССИВОВ Отчет по практической работе №1 по дисциплине «Структуры данных»

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

________ Р.Е. Ситарь

__.__.2025

Принял

Преподаватель

кафедры КИБЭВС

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

__.__.2025

Задание

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

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

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

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

Оглавление

Задание 2

Введение 4

1 ХОД РАБОТЫ 5

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

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

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

2 АЛГОРИТМИЧЕСКАЯ СЛОЖНОСТЬ 10

Заключение 11

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

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

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

Введение

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

1 ХОД РАБОТЫ

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

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

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

Р исунок 1.1 — Сортировка расческой

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

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

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

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

Р исунок 1.2 — Быстрая сортировка

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

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

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

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

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

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

Р исунок 1.4 — Сортировка обменом

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

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)

O(n^2)

O(n^2)

Таблица 1 — Сравнение алгоритмической сложности алгоритмов

Заключение

В процессе выполнения практической работы была достигнута поставленная цель: реализовать и протестировать три алгоритма сортировки: сортировка расческой, быстрая сортировка и сортировка обменом. Также согласно варианту №7 была реализована сортировка обменом и составлена блок-схема.

Приложение А

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

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

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("\nСортировка расческой:");

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 opora = arr[l + (r - l) / 2];

while (i <= j)

{

while (arr[i] < opora) i++;

while (arr[j] > opora) j--;

if (i <= j)

{

float temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

i++; j--;

}

}

if (l < j) { quicksort(arr, l, j); } // левая часть

if (i < r) { quicksort(arr, i, r); } // правая часть

}

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("\nБыстрая сортировка:");

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("\nСортировка обменом:");

foreach (var item in arr)

{

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

}

14

Соседние файлы в папке Практики(Вариант №7)