Сортировка

Сортировка в Python

Метод выбора

Сортировка обменами

«Быстрая сортировка»

Сортировка – это перестановка элементов массива в заданном порядке.

for i in range(N-1):
for j in range(N-2, i-1 ,-1):
if A[j+1] < A[j]:
A[j], A[j+1] = A[j+1], A[j]

for i in range(N):
for j in range(N-i-1):
if A[j+1] < A[j]:
A[j], A[j+1] = A[j+1], A[j]

for i in range(N-1):
nMin = i
for j in range(i+1,N):
if A[j] < A[nMin]:
nMin = j
if i!= nMin:
A[i], A[nMin] = A[nMin], A[i]

r

Еще один популярный простой метод сортировки, при котором на каждомэтапе выбирается минимальный элемент (из оставшихся) и ставится на свое место.

def qSort ( A, nStart, nEnd ):
if nStart >= nEnd: return
L = nStart; R = nEnd
X = A[(L+R)//2]
while L <= R:
while A[L] < X: L += 1
while A[R] > X: R -= 1
if L <= R:
A[L], A[R] = A[R], A[L]
L += 1; R -= 1
qSort ( A, nStart, R )
qSort ( A, L, nEnd ) qSort ( A, 0, N-1 )

import random
def qSort ( A ):
if len(A) <= 1: return A
X = random.choice(A)
B1 = [ b for b in A if b < X ]
BX = [ b for b in A if b == X ]
B2 = [ b for b in A if b > X ]
return qSort(B1)+BX+qSort(B2)

сначала поднимается «наверх» (к
началу массива) самый «лёгкий» (минимальный) элемент, затем следующий и т.д.

"Метод пузырька"

"Метод камня"

самый «тяжёлый» элемент опускается в конец массива.

Еще один популярный простой метод сортировки, при котором на каждом
этапе выбирается минимальный элемент (из оставшихся) и ставится на свое место.

r

Еще один популярный простой метод сортировки, при котором на каждомэтапе выбирается минимальный элемент (из оставшихся) и ставится на свое место.

В середине XX века математики и программисты серьезно занимались
разработкой более эффективных алгоритмов сортировки. Один из самых
популярных «быстрых» алгоритмов, разработанный в 1960 году английским учёным Ч. Хоаром, так и называется – «быстрая сортировка»

Скорость работы быстрой сортировки зависит от того, насколько удачно выбирается вспомогательный элемент X. Самый лучший случай – когда на каждом этапе массив делится на две равные части. Худший случай – когда в одной части оказывается только один элемент, а в другой –
все остальные. При этом глубина рекурсии достигает N, что может привести к переполнению стека
(нехватке стековой памяти).

Если длина массива не больше 1, то ответ – это сам
массив, сортировать тут нечего (строка 1). Иначе выбираем в качестве разделителя («стержневого
элемента», англ. pivot) X случайный элемент массива (строка 2), для этого используется функция
choice (в переводе с англ. – выбор) из модуля random.. В строках 3-5 с помощью генераторов
списков создаем три вспомогательных массива: в массив B1 войдут все элементы, меньшие X, в
массив BX – все элементы, равные X, а в массив B2 – все элементы, большие X. Теперь остается
отсортировать списки B1 и B2 (вызвав функцию qSort рекурсивно) и построить окончательный
список-результат, который «складывается» из отсортированного списка B1, списка BX, и отсортированного списка B2.

В отличие от многих популярных языков программирования, в Python есть встроенная функция для сортировки массивов (списков), которая называется sorted.

B = sorted ( A )

B = sorted ( A, reverse = True )

def lastDigit ( n ):
return n % 10
B = sorted ( A, key = lastDigit )

B = sorted ( A, key = lambda x: x % 10 )

A.sort ( key = lambda x: x % 10, reverse = True)