29 lines
1.6 KiB
Markdown
Executable File
29 lines
1.6 KiB
Markdown
Executable File
Сортировка перемешиванием, или шейкерная сортировка, или двунаправленная - разновидность [Сортировки пузырьком](Сортировка%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
|
||
``` |