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 HW7/task_1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
"""
1. Отсортируйте по убыванию методом "пузырька" одномерный целочисленный массив,
заданный случайными числами на промежутке [-100; 100). Выведите на экран
исходный и отсортированный массивы. Сортировка должна быть реализована в
виде функции. Обязательно доработайте алгоритм (сделайте его умнее).
Идея доработки: если за проход по списку не совершается ни одной сортировки, то завершение
Обязательно сделайте замеры времени обеих реализаций
Подсказка: обратите внимание, сортируем не по возрастанию, как в примере,
а по убыванию
"""


# from random import randint
import random
import timeit


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


"Доробатываем алгоритм"
def revert_bubble(original_list_2):
n = 1
t = 0
while n < len(original_list_2):
for i in range(len(original_list_2) - n):
if original_list_2[i] < original_list_2[i + 1]:
original_list_2[i], original_list_2[i + 1] = original_list_2[i + 1], original_list_2[i]
t = 1
if t == 0:
break
n += 1
return original_list_2

original_list = [random.randint(-100, 100) for _ in range(100)]
print(f'Исходные массивы:\n{original_list}\n')

original_list_2 = [random.randint(-100, 100) for _ in range(100)]
print(f'Сортированные массивы:\n{original_list_2}\n')

print(timeit.timeit("bubble_sort(original_list)", setup="from __main__ import bubble_sort, original_list", number=1000))
print(timeit.timeit("revert_bubble(original_list_2)", setup="from __main__ import revert_bubble, original_list_2", number=1000))

"""Результат замеров
original_list: 0.2859691070043482
original_list_2: 0.00576216698391363
По этим данным можно сделать вывод, что доработка показала эффективность"""
Copy link
Owner

Choose a reason for hiding this comment

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

Денис, а теперь поставьте number = 1
и посмотрите рез-тат замеров

52 changes: 52 additions & 0 deletions HW7/task_2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
"""
2. Отсортируйте по возрастанию методом слияния одномерный вещественный массив,
заданный случайными числами на промежутке [0; 50). Выведите на экран исходный
и отсортированный массивы.
Пример:
Введите число элементов: 5
Исходный - [46.11436617832828, 41.62921998361278, 18.45859540989644, 12.128870723745806, 8.025098788570562]
Отсортированный - [8.025098788570562, 12.128870723745806, 18.45859540989644, 41.62921998361278, 46.11436617832828]
"""


import numpy
import timeit


def merge_sort(orig_list):
to_be_sorted = orig_list[:]
if len(orig_list) > 1:
center = len(orig_list) // 2
left = orig_list[:center]
right = orig_list[center:]

merge_sort(left)
merge_sort(right)

i = 0
j = 0
k = 0

while i < len(left) and j < len(right):
if left[i] < right[j]:
orig_list[k] = left[i]
i += 1
else:
orig_list[k] = right[j]
j += 1
k += 1

while i < len(left):
orig_list[k] = left[i]
i += 1
k += 1

while j < len(right):
orig_list[k] = right[j]
j += 1
k += 1
return to_be_sorted

orig_list = [numpy.random.uniform(0.000000000000000, 50.000000000000000) for _ in range(5)]
print(f"Исходный массив:\n{orig_list}\n")
print(f"Отсортированный массив:\n{merge_sort(orig_list)}\n")
Copy link
Owner

Choose a reason for hiding this comment

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

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