Categorías: Todo - python - метод

por Артур Валиуллин hace 2 años

167

Сортировка

Сортировка

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

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

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

B = sorted ( A, reverse = True )

B = sorted ( A )

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

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

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

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

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

Еще один популярный простой метод сортировки, при котором на каждом

этапе выбирается минимальный элемент (из оставшихся) и ставится на свое место.



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

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

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

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

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)

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 )

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]

Еще один популярный простой метод сортировки, при котором на каждом

этапе выбирается минимальный элемент (из оставшихся) и ставится на свое место.

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): 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]

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

Сортировка

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

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

Метод выбора

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