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

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

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

Министерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР) Кафедра безопасности информационных систем (БИС)

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

Студент гр.

________

__.__.2025

Принял

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

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

________ Е.Е. Лунева

__.__.2025

Задание

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

Вариант 1. Третья сортировка - это сортировка выбором. Входные данные представлены только отрицательными целыми числами , минимальное число не меньше чем -10^6.

Оглавление

Задание 2

Введение 4

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

1 ХОД РАБОТЫ 5

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

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

1.3 Сортировка выбором 6

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

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

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

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

Введение

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

1 ХОД РАБОТЫ

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

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

Шаг между сравниваемыми элементами лучше брать с учётом специальной величины, называемой фактором уменьшения, оптимальное значение которой равно примерно 1,247.

На рисунке 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^2)

O(n^2)

O(n^2)

Приложение А

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

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

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

}

}

Приложение Б

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

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

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

Console.WriteLine("Отсортированный массив");

quickSort(arr, 0, n — 1);

PrintArray(arr, n);

Приложение В

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

Сортировка выбором

using System;

class Program

{

static void Main()

{

int[] numbers = new int[25];

Random random = new Random();

for (int i = 0; i < numbers.Length; i++)

{

numbers[i] = random.Next(-1000000, -1);

}

Console.WriteLine("\nНеотсортированный массив:");

for (int i = 0; i < numbers.Length; i++)

{

Console.Write(numbers[i] + " ");

}

SelectionSort(numbers);

Console.WriteLine("\n\nОтсортированный массив:");

for (int i = 0; i < numbers.Length; i++)

{

Console.Write(numbers[i] + " ");

}

}

static void SelectionSort(int[] arr)

{

for (int i = 0; i < arr.Length - 1; i++)

{

int minIndex = i;

for (int j = i + 1; j < arr.Length; j++)

{

if (arr[j] < arr[minIndex])

{

minIndex = j;

}

}

if (minIndex != i)

{

int temp = arr[i];

arr[i] = arr[minIndex];

arr[minIndex] = temp;

}

}

}

}

13

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