- •Лабораторная работа №1. Методы сортировки Цель работы
- •Ход работы
- •Результат работы программы
- •Код программы
- •Лабораторная работа №2. Методы поиска Цель работы
- •Код программы
- •Результат работы программы
- •Лабораторная работа №3. Методы поиска подстроки в строке Цель работы
- •Код программы
- •Результат работы программы
- •Список литературы
Федеральное агентство связи
Ордена Трудового Красного Знамени
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
Кафедра Математической Кибернетики и Информационных Технологий
Курсовая работа
по предмету «Структуры и алгоритмы обработки данных»
Выполнил:
Отметка_____________________
_____ _________ 2024 г.
Научный руководитель (подпись)
____________________
Кутейников И.А.
Москва 2024
Лабораторная работа №1. Методы сортировки 3
Цель работы 3
Ход работы 3
Результат работы программы 5
Код программы 6
Вывод 10
Лабораторная работа №2. Методы поиска 11
Цель работы 11
Код программы 11
Результат работы программы 15
Вывод 15
Лабораторная работа №3. Методы поиска подстроки в строке 17
Цель работы 17
Код программы 17
Результат работы программы 20
Вывод 21
Список литературы 22
Лабораторная работа №1. Методы сортировки Цель работы
Реализовать заданный метод сортировки числовой матрицы в соответствии с индивидуальным заданием. Для всех вариантов добавить реализацию быстрой сортировки (quicksort). Оценить время работы каждого алгоритма сортировки и сравнить его со временем стандартной функции сортировки, используемой в выбранном языке программирования.
Вариант 9: Сортировка обменом
Ход работы
В соответствии с заданием реализовал алгоритм быстрой сортировки на языке C#:
public static int[] QuickSort(int[] array, int leftIndex, int rightIndex)
{
var i = leftIndex;
var j = rightIndex;
var pivot = array[leftIndex];
while (i <= j)
{
while (array[i] < pivot)
{
i++;
}
while (array[j] > pivot)
{
j--;
}
if (i <= j)
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}
}
Затем реализовал алгоритм сортировки обменом:
static int[] SelectionSort(int[] nums)
{
int index = 0;
for (int i = 0; i < nums.Length; i++)
{
index = i;
for (int j = i; j < nums.Length; j++)
{
if (nums[j] < nums[index])
{
index = j;
}
}
if (nums[i] == nums[index])
{
continue;
}
int tmp = nums[i];
nums[i] = nums[index];
nums[index] = tmp;
}
return nums;
}
Результат работы программы
Сравнение времени выполнения алгоритмов для массива размером 10 тысяч элементов:
n |
Быстрая сортировка, мс |
Сортировка обменом, мс |
Стандартная сортировка, мс |
1 |
0,75 |
53,79 |
0,34 |
2 |
0,89 |
53,74 |
0,38 |
3 |
1,07 |
55,9 |
0,35 |
4 |
1,04 |
52,63 |
0,37 |
5 |
0,74 |
54,38 |
0,39 |
Средний показатель по итогам 5 экспериментов:
Быстрая сортировка: 0,90 мс
Сортировка обменом: 54,09 мс
Стандартная сортировка: 0,37 мс
Самой быстрой оказалась стандартная сортировка, а сортировка обменом показала худший результат.
Сравнение времени выполнения алгоритмов для массива размером 100 тысяч элементов:
n |
Быстрая сортировка, мс |
Сортировка обменом, мс |
Стандартная сортировка, мс |
1 |
6,4 |
5556,4 |
3,2 |
2 |
6,9 |
5347,1 |
3,2 |
3 |
6,5 |
5412,5 |
3,7 |
4 |
6,1 |
5304,8 |
3,4 |
5 |
5,9 |
5316,9 |
3,2 |
Средний показатель по итогам 5 экспериментов:
Быстрая сортировка: 6,4 мс
Сортировка обменом: 5387,5 мс
Стандартная сортировка: 3,3 мс
В результате увеличение массива в 10 раз, скорость сортировки обменом уменьшилась на два порядка, а скорость стандартной сортировки – на порядок. В результате самой быстрой вновь стала стандартная сортировка, однако при увеличение размера массива она может поравняться с быстрой.
Обращаем внимание на то, что при сортировках использовался одинаковый массив случайно сгенерированных чисел от 1 до 999.
