696просмотров
31.9%от подписчиков
13 марта 2026 г.
Score: 766
Предлагаю, что б немного отвлечься поговорить про сортировки. Представим, что вас спросили на собеседовании "Какие сортировки вы знаете?". Очевидно, это время блистать знаниями, а главное остроумием. В качестве вредного совета предлагаю следующие варианты: 🔸Сортировка Сталина
📄Суть: Проходим по списку. Если текущий элемент меньше предыдущего, мы его удаляем. Список становится отсортированным. Жестоко, но очень быстро O(n).
def stalin_sort(data): if not data: return [] sorted_list = [data[0]] for x in data[1:]: if x >= sorted_list[-1]: sorted_list.append(x) else: print(f"Элемент {x} не прошел проверку лояльности и был удален.") return sorted_list arr = [1, 5, 2, 8, 3, 10]
print(f"Результат: {stalin_sort(arr)}") # Вывод: [1, 5, 8, 10] 🔸Сортировка сном
📄Суть: Для каждого числа в массиве мы создаем отдельный поток, который «спит» количество секунд, равное этому числу. Как только поток просыпается, он добавляет свое число в итоговый список.
import asyncio async def sleep_sort(data): result = [] async def add_with_delay(n): await asyncio.sleep(n 0.1) # Множитель для скорости result.append(n) await asyncio.gather((add_with_delay(x) for x in data)) return result arr = [3, 1, 4, 2]
# Через 0.4 секунды мы получим [1, 2, 3, 4]
print(asyncio.run(sleep_sort(arr))) 💡Проблема: Если у вас есть число 1 000 000, удачи дождаться окончания сортировки. А если числа слишком близки (например, 0.001 и 0.002), погрешность системы может поменять их местами. 🔸Сортировка случаем (Bogo Sort)
📄Суть: Мы просто перемешиваем список случайным образом и проверяем: «А вдруг повезло и он отсортировался?». Если нет — мешаем снова.
import random def is_sorted(data): return all(data[i] <= data[i+1] for i in range(len(data)-1)) def bogo_sort(data): attempts = 0 while not is_sorted(data): random.shuffle(data) attempts += 1 return data, attempts arr = [3, 1, 2]
result, count = bogo_sort(arr)
print(f"Отсортировано за {count} попыток: {result}") 🔸Сортировка чудом.
📄Суть: Проверяем, что список отсортирован, если нет ждем и проверяем снова. В данном случае чудом может быть что угодно: ошибка в памяти (bit flip) из-за космических лучей, которая случайно поменяет биты в нужном порядке, или вмешательство высших сил. import time def miracle_sort(data): while not is_sorted(data): print("Ждем чуда...") time.sleep(10) # Даем Вселенной шанс return data Знаете ли еще какие-то варианты сортировки? #ds_лайфхаки #fun