1.6 KiB
1.6 KiB
Сортировка перемешиванием, или шейкерная сортировка, или двунаправленная - разновидность Сортировки пузырьком. Сложность алгоритма: O(n^2).
Алгоритм
Анализируя метод пузырьковой сортировки, можно отметить два обстоятельства.
-
Во-первых, если при движении по части массива перестановки не происходят, то эта часть массива уже отсортирована и, следовательно, её можно исключить из рассмотрения.
-
Во-вторых, при движении от конца массива к началу минимальный элемент «всплывает» на первую позицию, а максимальный элемент сдвигается только на одну позицию вправо.
Пример
В виде кода
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
