Сортировка перемешиванием, или шейкерная сортировка, или двунаправленная - разновидность [Сортировки пузырьком](Сортировка%20пузырьком). [Сложность алгоритма](Оценка%20сложности%20алгоритма): $O(n^2)$. #### Алгоритм Анализируя метод пузырьковой сортировки, можно отметить два обстоятельства. 1. Во-первых, если при движении по части массива перестановки не происходят, то эта часть массива уже отсортирована и, следовательно, её можно исключить из рассмотрения. 2. Во-вторых, при движении от конца массива к началу минимальный элемент «всплывает» на первую позицию, а максимальный элемент сдвигается только на одну позицию вправо. #### Пример ![[sort_shaker.gif]] #### В виде кода ```python 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 ```