Uploaded by Yura

6labALG

advertisement
Львівський Національний університет
імені Івана Франка
Факультет: електроніки і комп'ютерних технологій
КАФЕДРА радіофізики та комп'ютерних технологій
Звіт
Лабораторна робота
Лабораторна робота № 6 Швидке сортування. Порядкові статистики.
Виконав:
студент групи ФеП-12
Муха Юрій
Перевірив:
ас. Левуш П.Н.
Львів-2023
Теоретичні відомості (Лекція_8 Швидке сортування. Порядкові статистики.pdf)
Хід роботи:
Частина 1. Швидке сортування.
1.
У бібліотеці Sort
(створеній раніше), згідно описаних в теоретичній частині алгоритмів,
створити функції QuickSort(…), Partition(…) та RandomizedPartition(…)
для реалізації швидкого сортування одномірного масиву даних.
2.
Створити новий проект Lab_6_1 та підключити до нього бібліотеку Sort. У функції main()
проекту реалізувати можливість введення одномірного масиву даних та відображення
результатів сортування. Відкомпілювати проект та продемонструвати його роботу для
одномірного масиву даних, отриманого від викладача.
Частина 2. Порядкові статистики.
1.
Створити новий проект Lab_6_2. Згідно описаного в теоретичній частині алгоритму, створити
функцію RandomizedSelect(…) для пошуку
функції main()
порядкових
статистик.
У
проекту реалізувати можливість введення одномірного масиву даних та
відображення результатів пошуку порядкових статистик у ньому.
2.
Підключити до проекту Lab_6_2 бібліотеку Sort з метою використання функції
RandomizedPartition(…).
3.
Відкомпілювати проект та продемонструвати його роботу для одномірного масиву даних,
отриманого від викладача, зокрема, знайти максимальне, мінімальне значення та медіану.
Частина 1. Швидке сортування.
1.У бібліотеці Sort
(створеній раніше), згідно описаних в теоретичній частині алгоритмів,
створити функції QuickSort(…), Partition(…) та RandomizedPartition(…)
для реалізації швидкого сортування одномірного масиву даних.
2.
Створити новий проект Lab_6_1 та підключити до нього бібліотеку Sort. У функції main()
проекту реалізувати можливість введення одномірного масиву даних та відображення результатів
сортування. Відкомпілювати проект та продемонструвати його роботу для одномірного масиву даних,
отриманого від викладача.
main.py
from Sort import QuickSort
if __name__ == "__main__":
arr = [12, 4, 5, 6, 7, 3, 1, 15]
sorted_arr = QuickSort(arr)
print("Відсортований масив:", sorted_arr)
Sort.py
def QuickSort(arr):
if len(arr) <= 1:
return arr
else:
pivot = arr[0]
less = [x for x in arr[1:] if x <= pivot]
greater = [x for x in arr[1:] if x > pivot]
return QuickSort(less) + [pivot] + QuickSort(greater)
def Partition(arr, low, high):
pivot = arr[low]
left = low + 1
right = high
done = False
while not done:
while left <= right and arr[left] <= pivot:
left = left + 1
while arr[right] >= pivot and right >= left:
right = right - 1
if right < left:
done = True
else:
arr[left], arr[right] = arr[right], arr[left]
arr[low], arr[right] = arr[right], arr[low]
return right
def RandomizedPartition(arr, low, high):
# Додайте код для випадкового вибору опорного елемента
# Ви можете використовувати модуль random для цього.
pass
Частина 2. Порядкові статистики.
1.Створити новий проект Lab_6_2. Згідно описаного в теоретичній частині алгоритму,
створити функцію RandomizedSelect(…) для пошуку порядкових
функції main()
статистик.
У
проекту реалізувати можливість введення одномірного масиву даних та
відображення результатів пошуку порядкових статистик у ньому.
2.Підключити до проекту Lab_6_2 бібліотеку Sort з метою використання функції
RandomizedPartition(…).
3.Відкомпілювати проект та продемонструвати його роботу для одномірного масиву даних,
отриманого від викладача, зокрема, знайти максимальне, мінімальне значення та медіану.
main.py
from Sort import RandomizedSelect
if __name__ == "__main__":
arr = [12, 4, 5, 6, 7, 3, 1, 15]
min_val = RandomizedSelect(arr, 0, len(arr) - 1, 1)
max_val = RandomizedSelect(arr, 0, len(arr) - 1, len(arr))
median = RandomizedSelect(arr, 0, len(arr) - 1, len(arr) // 2 + 1)
print("Мінімальне значення:", min_val)
print("Максимальне значення:", max_val)
print("Медіана:", median)
Sort.py
import random
# Додайте цей імпорт для генерації випадкового опорного елемента
def RandomizedPartition(arr, low, high):
# Виберіть випадковий опорний елемент
random_index = random.randint(low, high)
arr[low], arr[random_index] = arr[random_index], arr[low]
pivot = arr[low]
left = low + 1
right = high
done = False
while not done:
while left <= right and arr[left] <= pivot:
left = left + 1
while arr[right] >= pivot and right >= left:
right = right - 1
if right < left:
done = True
else:
arr[left], arr[right] = arr[right], arr[left]
arr[low], arr[right] = arr[right], arr[low]
return right
def RandomizedSelect(arr, low, high, k):
if low == high:
return arr[low]
pivot_index = RandomizedPartition(arr, low, high)
pivot_rank = pivot_index - low + 1
if k == pivot_rank:
return arr[pivot_index]
elif k < pivot_rank:
return RandomizedSelect(arr, low, pivot_index - 1, k)
else:
return RandomizedSelect(arr, pivot_index + 1, high, k - pivot_rank)
Download