Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions Урок 7. Практическое задание/task_1.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,57 @@
Подсказка: обратите внимание, сортируем не по возрастанию, как в примере,
а по убыванию
"""

from random import randint
from timeit import timeit


def bubble_sort(orig_list):
n = 1
while n < len(orig_list):
for i in range(len(orig_list)-n):
if orig_list[i] < orig_list[i+1]:
orig_list[i], orig_list[i+1] = orig_list[i+1], orig_list[i]
n += 1
return orig_list


def bubble_sort_changed(orig_list):
n = 1
while n < len(orig_list):
a = True
for i in range(len(orig_list)-n):
if orig_list[i] < orig_list[i+1]:
orig_list[i], orig_list[i+1] = orig_list[i+1], orig_list[i]
a = False
if a:
break
n += 1
return orig_list


test_list = [randint(-100, 100) for _ in range(20)]
print(test_list)
l = test_list
m = test_list
print(bubble_sort(l))
print(bubble_sort_changed(m))


i = [randint(-100, 100) for _ in range(1000)]
j = [randint(-100, 100) for _ in range(1000)]
b = timeit("bubble_sort(i)", setup="from __main__ import bubble_sort, i", number=1)
c = timeit("bubble_sort_changed(j)", setup="from __main__ import bubble_sort_changed, j", number=1)
print(f'При ста элементах \n {b} - оригинальный пузырь \n {c} - измененный')

"""
При ста элементах
0.0010061999999999988 - оригинальный пузырь
0.0008992999999999987 - измененный

Даёт незначительный прирост по времени (и то не всегда), доработка не обязательна.
"""


Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

все верно



44 changes: 44 additions & 0 deletions Урок 7. Практическое задание/task_2.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,47 @@
Исходный - [46.11436617832828, 41.62921998361278, 18.45859540989644, 12.128870723745806, 8.025098788570562]
Отсортированный - [8.025098788570562, 12.128870723745806, 18.45859540989644, 41.62921998361278, 46.11436617832828]
"""
from random import random


def merge_sort(orig_list):
if len(orig_list) > 1:
center = len(orig_list) // 2 # Делим массив на два подмассива
left = orig_list[:center] # Левая часть от первого элеметна до центра
right = orig_list[center:] # Правая от центра до последнего
# print('левая ', left) # С помощью принтов нагядно видно как происходит деление
# print('правая ', right)
merge_sort(left) # Через рекурсию повторяем деление каждой половинки на другие половинки
merge_sort(right)

i, j, k = 0, 0, 0
# print(orig_list)
while i < len(left) and j < len(right): # Далее поочередно заполняем половины списков элеиентами в
if left[i] < right[j]: # порядке возрастания. Последним этам идёт присвоение элементам ориги
orig_list[k] = left[i] # нального списка значений отсортированных склееных половинок
i += 1
# print('основной 1 ',orig_list)
else:
orig_list[k] = right[j]
j += 1
# print('основной 2',orig_list)
k += 1

while i < len(left):
orig_list[k] = left[i]
i += 1
k += 1
# print('основной 3 ',orig_list)

while j < len(right):
orig_list[k] = right[j]
j += 1
k += 1
# print('основной 4',orig_list)
return orig_list


a = [random()*50 for el in range(int(input("Введите число элементов: ")))]
print(f'Исходный список - {a}')
# print(merge_sort([9, 6, 41, 29, 40])) на этом примере разбирался
print(f'Отсортированный список - {merge_sort(a)}')
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

слияние реализовано

24 changes: 24 additions & 0 deletions Урок 7. Практическое задание/task_3.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,27 @@
массива. Но если это слишком сложно, то используйте метод сортировки,
который не рассматривался на уроках
"""
from random import randint
import statistics
m = int(input('Введите натуральное число'))
a = [randint(0, 100) for el in range(2*m+1)]
print(a)
dif = {}
for i in a:
g = 0
t = 0
for j in a:
if i < j:
g += 1
elif i > j:
t += 1
dif[abs(g-t)] = i
print('Медиана по словарю', (dif[min(dif)]))
print(statistics.median(a))


Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

добавьте описание, какой подход применен