Сортировка пузырьком.
Нужно написать программу, которая сортирует список методом "Cортировки пузырьком".
Время выполнения алгоритма: O(n^2).
"""СОРТИРОВКА ПУЗЫРЬКОМ."""
import time, sys
def check(a):
test = True # создание флага
for i in range(len(a) - 1): # в цикле проверим, отсортирован ли список
if a[i] <= a[i + 1]:
test = False
else:
test = True
break
return test
# входные данные. Список, который надо отсортировать.
a = [10, 5, 2, 1, 3, 20, 11, 15, 4, 7, 100, 33, 6, 400, 55, 11, 1, 111, 7, 100, 33, 6, 400, 55, 11, 1, 111]
seconds = time.time()
while check(a):
for i in range(len(a) - 1): # в цикле сортируем список пузырьком
if a[i] > a[i + 1]:
a[i], a[i + 1] = a[i + 1], a[i]
seconds -= time.time()
print()
print("Вариант №1 (итеративный)", a)
print(f"Время выполнения: {seconds:0.20f}")
############################################################################################################
############################################################################################################
"""ДАЛЕЕ ПРИМЕР, КАК ДЕЛАТЬ НЕ НАДО!!! НЕ НАДО ИСПОЛЬЗОВАТЬ РЕКУРСИЮ."""
############################################################################################################
############################################################################################################
def bubble_sorting():
global a
test = False # создание флага для базового случая
for i in range(len(a) - 1): # в цикле проверим, отсортирован ли список, если отсортирован, то это базовый случай
if a[i] <= a[i + 1]:
test = True
else:
test = False
break
if test == True:
return None
else:
for i in range(len(a) - 1): # в цикле сортируем список пузырьком
if a[i] > a[i + 1]:
a[i], a[i + 1] = a[i + 1], a[i]
bubble_sorting() # будем вызывать функцию сортировки до получения результата
# входные данные. Список, который надо отсортировать.
a = [10, 5, 2, 1, 3, 20, 11, 15, 4, 7, 100, 33, 6, 400, 55, 11, 1, 111, 7, 100, 33, 6, 400, 55, 11, 1, 111]
seconds = time.time()
# вызов функции сортировки
sys.setrecursionlimit(100_000) # установим очень большую глубину рекурсии по-умолчанию 996
bubble_sorting()
seconds -= time.time()
print("Вариант №2 (рекурсивный)", a, end=" ")
print("Вторым способом делать не надо!!! При увеличении входных данных будет огромная глубина рекурсии.")
print(f"Время выполнения: {seconds:0.20f}")
print()