Files
knowledge_vault/Языки программирования/Сортировка перемешиванием.md
2025-12-19 13:47:54 +05:00

1.6 KiB
Raw Blame History

Сортировка перемешиванием, или шейкерная сортировка, или двунаправленная - разновидность Сортировки пузырьком. Сложность алгоритма: O(n^2).

Алгоритм

Анализируя метод пузырьковой сортировки, можно отметить два обстоятельства.

  1. Во-первых, если при движении по части массива перестановки не происходят, то эта часть массива уже отсортирована и, следовательно, её можно исключить из рассмотрения.

  2. Во-вторых, при движении от конца массива к началу минимальный элемент «всплывает» на первую позицию, а максимальный элемент сдвигается только на одну позицию вправо.

Пример

!sort_shaker.gif

В виде кода

def shaker_sort(a):
    n = len(a)
    left = 0
    right = n - 1
    while left < right:
        # Проход слева направо
        for i in range(left, right):
            if a[i] > a[i + 1]:
                a[i], a[i + 1] = a[i + 1], a[i]
        right -= 1

        # Проход справа налево
        for i in range(right, left, -1):
            if a[i] < a[i - 1]:
                a[i], a[i - 1] = a[i - 1], a[i]
        left += 1