Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 курс / Курсовая работа.docx
Скачиваний:
0
Добавлен:
26.01.2026
Размер:
410.5 Кб
Скачать

Оглавление

Лабораторная работа №1 «Методы сортировки» 2

Лабораторная работа №2 «Методы поиска» 7

Лабораторная работа №3 «Методы поиска подстроки в строке» 12

Лабораторная работа №4 «Реализация стека/дека» 18

Лабораторная работа №5 «Рекурсия. Фракталы.» 20

Лабораторная работа №1 «Методы сортировки» Вариант №12 «Пирамидальная сортировка»

Цель работы:

Реализовать заданный метод сортировки строк числовой матрицы в соответствии с индивидуальным заданием. Для всех вариантов добавить реализацию быстрой сортировки (quicksort). Оценить время работы каждого алгоритма сортировки и сравнить его со временем стандартной функции сортировки, используемой в выбранном языке программирования.

Ход работы:

Для реализации целей лабораторной работы выбрала язык программирования Python. Для сравнения сортировок написала функцию быстрой сортировки:

def quicksort(arr): if len(arr) <= 1: return arr pivot = arr[len(arr) // 2] left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quicksort(left) + middle + quicksort(right)

Также реализовала пирамидальную сортировку:

def heapsort(arr): n = len(arr) for i in range(n // 2 - 1, -1, -1): heapify(arr, n, i) for i in range(n - 1, 0, -1): arr[i], arr[0] = arr[0], arr[i] heapify(arr, i, 0)

Для создания изначальной кучи, добавила возможность ввода размера массива, генерацию массива и создание таблицы, для вывода конечных результатов. Сравнение скорости выполнения сортировки разными методами на примере массива размером 100000:

Пирамидальная сортировка, мс

Встроенная сортировка, мс

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

1

12.981

15.081

155.561

2

13.130

18.857

126.689

3

15.254

16.707

178.601

4

15.045

27.853

163.745

5

12.689

11.778

91.341

Среднее время выполнения каждого из алгоритмов:

Пирамидальная сортировка – 13.820мс

Встроенная сортировка – 18.055мс

Быстрая сортировка – 143.188мс

Можно проследить, что лучше всего себя показала Пирамидальная сортировка. Но мы можем повторить опыт для массива размером 1000000:

Пирамидальная сортировка, мс

Встроенная сортировка, мс

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

1

150.040

149.962

1621.002

2

166.478

148.201

1404.876

3

213.159

158.855

1348.476

4

177.263

154.360

1373.148

5

138.301

145.818

1423.088

Среднее время выполнения каждого из алгоритмов:

Пирамидальная сортировка – 169.048мс

Встроенная сортировка – 151.439мс

Быстрая сортировка – 1434.118мс

При наибольшем размере массива, наилуший результат показала Встроенная сортировка, а худший – Быстрая сортировка. Обращаем внимание на то, что при сортировках использовался одинаковый массив случайно сгенерированных чисел

Код программы:

import time import random def heapify(arr, n, i): largest = i left = 2 * i + 1 right = 2 * i + 2 if left < n and arr[i] < arr[left]: largest = left if right < n and arr[largest] < arr[right]: largest = right if largest != i: arr[i], arr[largest] = arr[largest], arr[i] heapify(arr, n, largest) def heapsort(arr): n = len(arr) for i in range(n // 2 - 1, -1, -1): heapify(arr, n, i) for i in range(n - 1, 0, -1): arr[i], arr[0] = arr[0], arr[i] heapify(arr, i, 0) def quicksort(arr): if len(arr) <= 1: return arr pivot = arr[len(arr) // 2] left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quicksort(left) + middle + quicksort(right) def generate_random_array(size): return [random.randint(0, 1000) for _ in range(size)] def measure_time(func, arr): start_time = time.time() func(arr.copy()) return (time.time() - start_time) * 1000 def print_table(results): print("| n | Пирамидальная сортировка,мс | Встроенная сортировка,мс | Быстрая сортировка,мс |") print("|---|---|---|---|") for i, row in enumerate(results): print(f"| {i+1} | {row[0]:.3f} | {row[1]:.3f} | {row[2]:.3f} |") def main(): size = int(input("Введите размер массива: ")) results = [] for _ in range(5): arr = generate_random_array(size) shell_time = measure_time(sorted, arr) std_time = measure_time(sorted, arr) quick_time = measure_time(quicksort, arr) results.append([shell_time, std_time, quick_time]) print_table(results) avg_shell = sum(row[0] for row in results) / 5 avg_std = sum(row[1] for row in results) / 5 avg_quick = sum(row[2] for row in results) / 5 print("\nСреднее время выполнения каждого из алгоритмов:") print(f"Пирамидальная сортировка – {avg_shell:.3f}мс") print(f"Сортировка Питон – {avg_std:.3f}мс") print(f"Быстрая сортировка – {avg_quick:.3f}мс") if __name__ == "__main__": main()

Вывод:

При меньшем размере массива (100 000 элементов) пирамидальная сортировка показала лучший результат, опередив встроенную сортировку и быструю сортировку. Однако при увеличении размера массива до 1 000 000 элементов ситуация изменилась: встроенная сортировка стала лидером по скорости, а быстрая сортировка значительно отстала по времени выполнения.

Соседние файлы в папке 4 курс