Тёмный

Быстрая сортировка в python. Quick sort in Python. Recursive sorting algorithms 

egoroff_channel
Подписаться 139 тыс.
Просмотров 41 тыс.
50% 1

Стать спонсором канала и получить доступ к дополнительным материалам по Python
/ @egoroffchannel
boosty.to/egoroff_channel
/ artem_egorov
Сортировка слиянием в python
• Сортировка слиянием в ...
Условие задачи
stepik.org/edit-lesson/372095...
Рекурсия в Python. Рекурсивная функция
• 42 Рекурсия в Python. ...
stepik.org/course/63085/syllabus
Курс по основам python на Степике
stepik.org/course/72969/promo
Записывайся на курс на Stepic по ООП, где найдешь много практических задач
Если кому нужна помощь, предлагаю индивидуальные занятия. Подробнее пишите в личку в вк
artem_egoroff
python.study
В данном группе можете найти информацию о новых видео и задать вопросы

Опубликовано:

 

7 дек 2020

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 53   
@dimitrilarios2667
@dimitrilarios2667 3 года назад
Отличный преподаватель. Алгоритмы - в плейлист.
@user-bq3uk7ch8m
@user-bq3uk7ch8m Год назад
Спасибо, Егор, по моему самое адекватное объяснение. И слушать приятно)).
@vladislav.ivanov
@vladislav.ivanov Год назад
Спасибо, наконец-то разобрался с рекурсией
@user-gb2jd6kb3w
@user-gb2jd6kb3w 2 года назад
Спасибо! Наконец-то понял. Отдельная благодарность за демонстрацию работы с отладчиком.
@TIMSYSTEM
@TIMSYSTEM 3 года назад
Выглядит как магия!
@mystical_stories
@mystical_stories 2 года назад
_Большое спасибо за урок!_ Этот понятнее, чем предыдущий)
@doloidiktatorov
@doloidiktatorov 3 года назад
Огромное спасибо за алгоритмы.
@user-uy3nd3wb5o
@user-uy3nd3wb5o Год назад
Лучшее объяснение что нашел на ютубе. Благодарю
@ymnop9652
@ymnop9652 Год назад
Уф, целых три цикла перебора вместо одного, супер эффективно:D
@evollt
@evollt 3 года назад
красавчик. Объяснил все на понятном языке. Недавно начал читать книгу:"грокаем алгоритмы",вот и не понял алгоритм быстрой сортировки,а ты все прям разжевал как надо. Подписочка оформлена!
@arxxximed
@arxxximed 3 года назад
А в целом очень хорошо и понятно объясняете
@rentbest
@rentbest Год назад
Спасибо за видео. Я проверил два способа: 1) с использованием метода filter 2) генератор списка через [el for el in arr if el (, ==) pivot] Вывод: второй метод быстрее, так как не идет вызов функций (а такая операция в питоне происходит не слишком быстро). Возможно, в другом языке ситуация будет иная.
@begula_chan
@begula_chan Год назад
Спасибо!
@vivacuba1990
@vivacuba1990 3 года назад
ясно и понятно...
@sergeyl1223
@sergeyl1223 Год назад
elem = s[len(s)//2] вот так должно быть. А иначе при выборе элементов > 2 ошибку выбивает
@user-tl6lm1kh7w
@user-tl6lm1kh7w 2 года назад
Ты хорош !)
@zhanibeksapakov9084
@zhanibeksapakov9084 Год назад
спасибо
@gitarre_spielen
@gitarre_spielen 10 месяцев назад
скажите, товарищи, а такого рода многократные пробежки не тратят ли больше памяти и времени? я понимаю, это генераторы, однако в каждом следующем генераторе мы проверяем каждый элемент повторно! не эффективнее ли запустить один цикл и в нём проверять величину переменной? for i in lst: if i < base: less.append(i) elif i > base: bigger.append(i) else: centre.append(i) или получается одно и то же, ведь мы каждый элемент в худшем случае проверяем дважды?
@arxxximed
@arxxximed 3 года назад
Вы создаете на каждой итерации рекурсии новые списки- при больших начальных списках память уйдет очень быстро. Изначальный алгоритм быстрой сортировки - эта работа с указателями.
@trahar
@trahar 3 года назад
он изначально сказал "один из способов быстрой сортировки", что это подразумевает под собой?!?!? способ на то и способ, что подходит для определённых ситуаций, когда список маленький - пожалуйста, пользуйся! большой?! ищи идею лучше!
@arxxximed
@arxxximed 3 года назад
@@trahar отчасти согласен с вашим рассуждением. Отчасти нет. 1. По поводу лучшего способа - лучший способ на сегодняшний момент - это как раз пользоваться встроенными средствами языка. 2. Здесь мы разбираем классические алгоритмы. Соответственно было бы не плохо указать плюсы и минусы этих алгоритмов. Плюс Quick search как раз таки в том, что он должен работать с одним списком как объект, не создавая новых, и не захламляя память. Автор очень хорошо и понятно объяснил суть работы алгоритма на примере создания списков... Но наверное стоило бы потом и перейти на классическую его реализацию... С объяснением и разбором.
@trahar
@trahar 3 года назад
@@arxxximed это да! так-то и нужно
@dimakovalenkov7835
@dimakovalenkov7835 3 года назад
+ каждый раз список перебирается по 3 раза по итогу сортировка замедляется в 3 раза теперь это медленная сортировка = )
@edgull_tlt
@edgull_tlt 2 года назад
Спасибо
@codetoday1055
@codetoday1055 Год назад
Яке це швидке сортування якщо ви створюєте нові масиви. Тобто відміність швидкого сортуввння від сортування злиттям зникає. (їх відміність в просторовій суладності)
@user-ob7ri7ct7o
@user-ob7ri7ct7o Месяц назад
В "Грохаем алгоритмы" есть фраза - "Если вы всегда будете выбирать опорным элементом случайный элемент в массиве, бы­ страя сортировка в среднем завершится за время О(п log п). " - при этом результирующий массив отличается по количеству элементов от искомого (по вашей программе)((( Как это исправить??
@user-sw2uk8xu2i
@user-sw2uk8xu2i 2 года назад
Вы в самом начале ролика сказали что можно брать любой элемент. Это явно ошибка потому что при увеличении размеров списка и например если мы берем первый элемент - скорость вашей работы будет заведомо меньше чем при серединном элементе. Это можно явно заметить при быстрой сортировке с разбиением дейкстры. Если в этом случае вы берете первый элемент - у вас идет сильный упадок скорости. Этот момент нужно подметить и учесть что каждый элемент должен быть - element = array[len(array) // 2] - вот в таком случае на каждой итерации будет решать за nlogn Учтите это после просмотра!
@begula_chan
@begula_chan Год назад
А выбор рандомного опорного элемента тоже будет занимать nlogn?
@Nikbleat
@Nikbleat 2 года назад
Такой вопрос, несколько глупый может быть, но для меня пока актуальный. Почему алгоритм является более быстрым, если в обычной сортировке, методом перебора всех элементов и перестановки позиций, так же проверяется каждый элемент, но в этом методе ещё больше действий кроме перебора элементов? И это ещё не говоря о вложенности, которая при огромных массивах вообще может нехило занять память.
@user-zy5qr6cn1p
@user-zy5qr6cn1p Год назад
из-за рекурсии думаю
@MrFrimko
@MrFrimko Год назад
количество этих самых переборов другое. попробуй руками отсортировать список пузырьком и квиксортом, считая количество сравнений и перестановок. что бы разница была видна, список побольше взять, 7+ элементов
@WinchesterD
@WinchesterD 2 года назад
Эх, кто бы ещё объяснил, зачем знать алгоритмы сортировки разработчику на Python, если встроенный метод прекрасно справляется с задачей.
@Nikbleat
@Nikbleat 2 года назад
Этим вопросом ты должен был озадачиться ещё перед изучением алгоритмов
@ymnop9652
@ymnop9652 Год назад
Нет универсального алгоритма, и не смотря на то, что в питоне умный сортировщик и он использует несколько алгоритмов, возможна ситуация когда тебе для оптимального решения текущей задачи нужен конкретный алгоритм сортировки, для этого нужно знать алгоритмы сортировки, их слабые и сильные места. А тут задачу изменили нужный алгоритм из гугла не работает, его нужно чуть изменить под специфику задачи, скажем сделать не устойчивым и ещё что-то там. Теперь тебе нужно знать не только что существует такой алгоритм, но и как он работает и что нужно изменить в нём для решения проблемы. Алгоримы это история про эффективность, понимая как их делают такими быстрыми можно в принципе писать более чистый код, который легче читать ещё он будет быстрее и в нём не будет лишних условий\сомнительных решений. И даже решая другую задачу принцип решения алгоритмов может быть полезен: придумай наивное решение, разбей задачу, найди бутылочное горлышко, сделай рефакторинг -> повторяй до оптимального результата.
@braininasquare2199
@braininasquare2199 2 года назад
Через фильтр большой список становится далеко не быстрым для сортировки
@vetenskap1573
@vetenskap1573 Год назад
У меня вопрос возник, а почему все эти супер пупер алгоритмы изначально не встроить в языке программирования в качестве встроенных функций ? Почему нужно свои костыли делать ?
@MrFrimko
@MrFrimko Год назад
так они есть. алгоритмы надо изучать не для того что их самому писать, а что понимать как работает то что уже написано
@tumka6988
@tumka6988 2 года назад
сортировка летит на массиве из равных элементов
@obe1313
@obe1313 3 года назад
зачем center, если left всегда меньше elem, а right всегда больше elem? можно center убрать, и возвращать return qiucksort(left) + [elem] + qiucksort(right) def qiuck_sort(s): if len(s) < 2: return s else: elem = s[0] left = [i for i in s[1:] if i < elem] right = [i for i in s[1:] if i > elem] return qiuck_sort(left) + [elem] + qiuck_sort(right)
@arxxximed
@arxxximed 3 года назад
так был же пример, а если ты выбрал в качестве ключевого элемента семерку, а у тебя в списке 30 семерок? Остальные семерки в какую сторону пойдут в right или left?
@obe1313
@obe1313 3 года назад
Al Zhuch делаешь тогда меньше либо равно в left, либо наоборот в right
@arxxximed
@arxxximed 3 года назад
@@obe1313 И можешь столкнуться с бесконечным циклом )))))) Ты попробуй написать эту прогу
@gameplays_from_hdd
@gameplays_from_hdd 2 года назад
@@arxxximed, каким образом там бесконечный цикл появляется?
@user-dx1db3sz3n
@user-dx1db3sz3n Год назад
программирование не твое, иди в начальники)
@Strongflight
@Strongflight 2 года назад
Команда на выход приводит к ошибке. Немного переделал:
@Strongflight
@Strongflight 2 года назад
def quick_sort(s): if len(s) > 1: elem = s[0] left = list(filter(lambda x: x < elem, s)) center = [i for i in s if i == elem] right = list(filter(lambda x: x > elem, s)) return quick_sort(left) + center + quick_sort(right) else: return s
@fugas6258
@fugas6258 Год назад
*ваавав*
@Al-en6nj
@Al-en6nj 3 года назад
Быстрая сортировка ---> sort(....)
@trahar
@trahar 3 года назад
можешь отписаться от канала и больше не смотреть никаких материалов на тему сортировки, раз такой умник
@justalpaca4943
@justalpaca4943 3 года назад
Ахахах, программист нашелся... Задача не отсортировать что-то а понять принцип работы данного алгоритма. Как минимум по твоему комментарию можно прийти к выводу что программирование это не твоё. Не знаю, займись чем-нибудь другим.
@CRESHT
@CRESHT Год назад
Объяснение хорошее, но код кошмар для новичков. Какая-то лябда, for - просто ужас. Как научиться сортировке если код не понятен ?
@nicholasspezza9449
@nicholasspezza9449 10 месяцев назад
Ни про сложность по времени не рассказал, ни по памяти.
Далее
#kikakim
00:12
Просмотров 844 тыс.
C# QuickSort Быстрая сортировка
21:32
Рекурсия в Python
52:13
Просмотров 3 тыс.