def bubble_sort_chebur_list(some_list):
"""
Сортирует список чисел, используя алгоритм "пузырьковой" сортировки.
Каждый проход по списку — это отдельный переговорный процесс между соседними элементами.
"""
n = len(some_list)
# Внешний цикл отвечает за количество полных проходов (итераций переговоров).
for i in range(n):
swapped = False
print(f"\nИтерация {i + 1}. Начинаем большой переговорный процесс.")
# Внутренний цикл сравнивает пары соседей и меняет их местами.
for j in range(0, n - i - 1):
# Если левый "чебурек" больше правого, они вступают в локальный переговорный процесс.
if some_list[j] > some_list[j + 1]:
print(f"Обнаружен конфликт: индекс {j} ({some_list[j]}) > индекс {j+1} ({some_list[j+1]}).")
print("Запускаем экстренный переговорный процесс для двух чебуреков...")
# Меняем их местами (заключаем сделку)
some_list[j], some_list[j + 1] = some_list[j + 1], some_list[j]
swapped = True
print(f"Сделка закрыта. Самый тяжелый чебурек ({some_list[j+1]}) всплыл вправо.")
else:
print(f"Элементы {some_list[j]} и {some_list[j+1]} довольны текущим порядком. Переговоры не требуются.")
# Если за весь проход ни одной сделки не состоялось, массив отсортирован досрочно.
if not swapped:
print("\nПереговорный процесс завершен досрочно: никто не захотел меняться местами.")
break
print(f"Состояние списка после итерации {i + 1}: {some_list}")
# Пример использования со списком, который похож на калорийность разных чебуреков
cheburek_calories = [64, 32, 85, 11, 99, 27]
print(f"Исходная стопка чебуреков: {cheburek_calories}\n")
bubble_sort_chebur_list(cheburek_calories)
print(f"\nФинальный результат: идеальная пирамида из чебуреков -> {cheburek_calories}")
Как работает этот код:
Пузырёк: Алгоритм многократно проходит по неотсортированной части массива. На каждом шаге он сравнивает два соседних элемента. Если они стоят в неправильном порядке (левый больше правого), они меняются местами. Из-за этого самые большие значения постепенно «всплывают» к концу списка, подобно пузырькам воздуха в воде или самому тяжелому чебуреку, падающему на дно коробки.
Чебурек: В этом коде каждый элемент списка метафорически представлен как горячий сочный чебурек. Его значение можно воспринимать как вес или степень прожарки. Наша задача — выстроить их в аккуратную пирамиду от самого легкого к самому сытному.
Переговорный процесс: Это центральная метафора кода. Сравнение каждой пары элементов представлено как дипломатические переговоры. Если один чебурек оказывается «тяжелее» другого, начинается обсуждение условий обмена позициями. Как только сделка совершена, более легкий чебурек остается слева, а более весомый отправляется дальше вправо к концу списка. Флаг swapped позволяет завершить общий переговорный процесс раньше срока, если стороны пришли к полному согласию и менять больше нечего.