Knoledge_v0
This commit is contained in:
29
Языки программирования/Сортировка перемешиванием.md
Normal file
29
Языки программирования/Сортировка перемешиванием.md
Normal 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
|
||||
```
|
||||
Reference in New Issue
Block a user