Knoledge_v0

This commit is contained in:
lambehorn
2025-12-19 13:39:24 +05:00
parent e97ecdf4dc
commit 422861cb0b
165 changed files with 2282 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
Сортировка перемешиванием, или шейкерная сортировка, или двунаправленная - разновидность [Сортировки пузырьком](Сортировка%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
```