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

29 lines
1.6 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Сортировка перемешиванием, или шейкерная сортировка, или двунаправленная - разновидность [Сортировки пузырьком](Сортировка%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
```