Автор оригинала: Chris.
В этом курсе одноклассника вы узнаете о популярном алгоритме сортировки QuickSort Отказ Удивительно, что одна строка кода Python – это все, что вам нужно для написания алгоритма Quicksort!
Проблема : Учитывая список численных значений (целое число или поплавок). Сортируйте список в одной строке кода Python с использованием популярных QuickSort алгоритм!
Пример : У вас есть список [4, 2, 1, 42, 3]
. Вы хотите сортировать список в порядке возрастания, чтобы получить новый список [1, 2, 3, 4, 42]
.
Краткий ответ : Следующее решение одноклассника сортирует список рекурсивно, используя алгоритм Quicksort:
q = lambda l: q([x for x in l[1:] if x <= l[0]]) + [l[0]] + q([x for x in l if x > l[0]]) if l else []
Вы можете попробовать сами, используя следующий интерактивный код Shell:
Теперь давайте погрузимся в некоторые детали!
Концептуальное введение
Следующее введение основано на моей новой книге “Python One-listers” (Amazon Link) Это учит вам силу единой строки кода (используйте ее с умом)!
Введение : QuickSort Не только популярный вопрос во многих Кодовые интервью – спросил Google, Facebook и Amazon – но также практично сортировка Алгоритм, который быстро, краткий и читаемый. Из-за своей красоты вы не найдете много введения в классы алгоритма, которые не обсуждают алгоритм Quicksort.
Обзор : Quicksort сортирует список by рекурсивно Разделение большой проблемы (сортировка списка) на более мелкие проблемы (сортировка двух меньших списков) и сочетание решений от меньших проблем таким образом, чтобы она решала большую проблему. Чтобы решить каждую меньшую проблему, та же самая стратегия используется рекурсивно: меньшие проблемы делятся на даже меньшие подпруты, решающие отдельно и объединенные. В связи с этой стратегией Quicksort принадлежит к классу алгоритмов «разделить и завоевать».
Алгоритм : Основная идея QuickSort состоит в том, чтобы выбрать элемент поворота, а затем помещать все элементы, которые больше или равны, чем элемент поворота вправо и все элементы, которые меньше, чем элемент поворота влево. Теперь вы разделили большую проблему сортировки списка на две меньшие подпруты: сортировка права и левой раздел списка. То, что вы делаете сейчас, это рекурсивно повторить эту процедуру, пока вы не получите список нулевых элементов. Этот список уже отсортирован, поэтому рекурсион завершается.
На следующем рисунке показан алгоритм Quicksort в действии:
Рисунок: Алгоритм Quicksort выбирает элемент поворота, разбивает список в (i) несортированным подсредством со всеми элементами, которые меньше или равны, чем Pivot, и (ii) unsorted sublist со всеми элементами, которые больше, чем у поворота. Далее алгоритм Quicksort рекурсивно называется двумя несортированными сублистами, чтобы сортировать их. Как только сублисты содержат максимально один элемент, они отсортированы по определению – заканчивается рекурсион. На каждом уровне рекурсии три сублисты (слева, поворот, справа) объединяются до того, как результирующий список передан на более высокий уровень рекурсиона.
Это приводит нас к следующему коду:
Python One-Liner QuickSort [код]
Создать функцию q который реализует алгоритм Quicksort в одной строке кода Python – и, таким образом, сортирует любой аргумент, приведенный в виде списка целых чисел.
## The Data unsorted = [33, 2, 3, 45, 6, 54, 33] ## The One-Liner q = lambda l: q([x for x in l[1:] if x <= l[0]]) + [l[0]] + q([x for x in l if x > l[0]]) if l else [] ## The Result print(q(unsorted))
Листинг: одноклассное решение для алгоритма Quicksort с использованием рекурсии.
Что такое выход этого кода? Давайте посмотрим…
Объяснение QuickSort One-LiLER
Мы уже обсудили рекурсивный алгоритм Quicksort выше. Одноклассник напоминает именно обсужденный алгоритм. Во-первых, мы создаем новый лямбда Функция Q, который занимает только один список списков l
.
Функция лямбда имеет следующую структуру:
lambda l: q(left) + pivot + q(right) if l else []
Функция лямбда возвращает пустой список []
В случае рекурсионного база (то есть – список сортировки пусто и, следовательно, тривиально сортируется).
В любом другом случае он выбирает элемент Pivot в качестве первого элемента списка л
делит все элементы на два Сублисты (слева и справа) основано на том, меньше ли они меньше или больше, чем у поворота. Для этого мы используем простой Понимание списка Отказ
Поскольку два сублиста не обязательно сортируются, мы рекурсивно выполняем алгоритм Quicksort на них. Наконец, мы объединяем все три списка и вернемся отсортированного списка. Поэтому результатом является:
## The Result print(q(unsorted)) # [2, 3, 6, 33, 33, 45, 54]
Связанный : Для интерактивного опыта того, что вы только что узнали, ознакомьтесь с нашей почтой Instagram о алгоритме Quicksort:
Ein Beitrag Geteilt Von Python Blog (@ finxter.com_) Я
Связанные ресурсы :
- Самое короткое внедрение Quicksort
- Python одна линия х
- Pythononeliners.com
- Книга “Python One-listers” (Amazon Link)
- Python одна линия для петли
- Python Quicksort одна линия
Куда пойти отсюда?
Достаточно теории, давайте познакомимся!
Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?
Практические проекты – это то, как вы обостряете вашу пилу в кодировке!
Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?
Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.
Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.
Присоединяйтесь к свободному вебинару сейчас!
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.
Оригинал: “https://blog.finxter.com/python-one-line-quicksort/”