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

  Рет қаралды 44,165

egoroff_channel

egoroff_channel

Күн бұрын

Пікірлер: 56
@dimitrilarios2667
@dimitrilarios2667 4 жыл бұрын
Отличный преподаватель. Алгоритмы - в плейлист.
@rentbest
@rentbest Жыл бұрын
Спасибо за видео. Я проверил два способа: 1) с использованием метода filter 2) генератор списка через [el for el in arr if el (, ==) pivot] Вывод: второй метод быстрее, так как не идет вызов функций (а такая операция в питоне происходит не слишком быстро). Возможно, в другом языке ситуация будет иная.
@ТигранСаркисян-ф3и
@ТигранСаркисян-ф3и Жыл бұрын
Спасибо, Егор, по моему самое адекватное объяснение. И слушать приятно)).
@ДмитрийСмолянников
@ДмитрийСмолянников 3 жыл бұрын
Спасибо! Наконец-то понял. Отдельная благодарность за демонстрацию работы с отладчиком.
@TIMSYSTEM
@TIMSYSTEM 4 жыл бұрын
Выглядит как магия!
@barbaferam4762
@barbaferam4762 2 ай бұрын
Я использую combosort годами, он прекрасно вписьівается в целочисленную математику, и не изпользует много оперативки и стека.
@vladislav.ivanov
@vladislav.ivanov Жыл бұрын
Спасибо, наконец-то разобрался с рекурсией
@evollt
@evollt 3 жыл бұрын
красавчик. Объяснил все на понятном языке. Недавно начал читать книгу:"грокаем алгоритмы",вот и не понял алгоритм быстрой сортировки,а ты все прям разжевал как надо. Подписочка оформлена!
@ЧувакИзКосмоса
@ЧувакИзКосмоса Жыл бұрын
скажите, товарищи, а такого рода многократные пробежки не тратят ли больше памяти и времени? я понимаю, это генераторы, однако в каждом следующем генераторе мы проверяем каждый элемент повторно! не эффективнее ли запустить один цикл и в нём проверять величину переменной? for i in lst: if i < base: less.append(i) elif i > base: bigger.append(i) else: centre.append(i) или получается одно и то же, ведь мы каждый элемент в худшем случае проверяем дважды?
@МагомедНурмагомедов-л3п
@МагомедНурмагомедов-л3п 2 жыл бұрын
Лучшее объяснение что нашел на ютубе. Благодарю
@doloidiktatorov
@doloidiktatorov 4 жыл бұрын
Огромное спасибо за алгоритмы.
@arxxximed
@arxxximed 4 жыл бұрын
Вы создаете на каждой итерации рекурсии новые списки- при больших начальных списках память уйдет очень быстро. Изначальный алгоритм быстрой сортировки - эта работа с указателями.
@trahar
@trahar 4 жыл бұрын
он изначально сказал "один из способов быстрой сортировки", что это подразумевает под собой?!?!? способ на то и способ, что подходит для определённых ситуаций, когда список маленький - пожалуйста, пользуйся! большой?! ищи идею лучше!
@arxxximed
@arxxximed 4 жыл бұрын
@@trahar отчасти согласен с вашим рассуждением. Отчасти нет. 1. По поводу лучшего способа - лучший способ на сегодняшний момент - это как раз пользоваться встроенными средствами языка. 2. Здесь мы разбираем классические алгоритмы. Соответственно было бы не плохо указать плюсы и минусы этих алгоритмов. Плюс Quick search как раз таки в том, что он должен работать с одним списком как объект, не создавая новых, и не захламляя память. Автор очень хорошо и понятно объяснил суть работы алгоритма на примере создания списков... Но наверное стоило бы потом и перейти на классическую его реализацию... С объяснением и разбором.
@trahar
@trahar 4 жыл бұрын
@@arxxximed это да! так-то и нужно
@dimakovalenkov7835
@dimakovalenkov7835 3 жыл бұрын
+ каждый раз список перебирается по 3 раза по итогу сортировка замедляется в 3 раза теперь это медленная сортировка = )
@userr19194
@userr19194 3 жыл бұрын
_Большое спасибо за урок!_ Этот понятнее, чем предыдущий)
@sergeyl1223
@sergeyl1223 Жыл бұрын
elem = s[len(s)//2] вот так должно быть. А иначе при выборе элементов > 2 ошибку выбивает
@ymnop9652
@ymnop9652 Жыл бұрын
Уф, целых три цикла перебора вместо одного, супер эффективно:D
@arxxximed
@arxxximed 4 жыл бұрын
А в целом очень хорошо и понятно объясняете
@begula_chan
@begula_chan Жыл бұрын
Спасибо!
@doordie6341
@doordie6341 Ай бұрын
есть разница в скорости выполнения алгоритма исходя из того какой элемент брать за базовый?
@codetoday1055
@codetoday1055 Жыл бұрын
Яке це швидке сортування якщо ви створюєте нові масиви. Тобто відміність швидкого сортуввння від сортування злиттям зникає. (їх відміність в просторовій суладності)
@АлексейЮдин-и9д
@АлексейЮдин-и9д 6 ай бұрын
В "Грохаем алгоритмы" есть фраза - "Если вы всегда будете выбирать опорным элементом случайный элемент в массиве, бы­ страя сортировка в среднем завершится за время О(п log п). " - при этом результирующий массив отличается по количеству элементов от искомого (по вашей программе)((( Как это исправить??
@ГеоргийЗагорский-э5к
@ГеоргийЗагорский-э5к 2 жыл бұрын
Вы в самом начале ролика сказали что можно брать любой элемент. Это явно ошибка потому что при увеличении размеров списка и например если мы берем первый элемент - скорость вашей работы будет заведомо меньше чем при серединном элементе. Это можно явно заметить при быстрой сортировке с разбиением дейкстры. Если в этом случае вы берете первый элемент - у вас идет сильный упадок скорости. Этот момент нужно подметить и учесть что каждый элемент должен быть - element = array[len(array) // 2] - вот в таком случае на каждой итерации будет решать за nlogn Учтите это после просмотра!
@begula_chan
@begula_chan Жыл бұрын
А выбор рандомного опорного элемента тоже будет занимать nlogn?
@ИгорьСухов-т6щ
@ИгорьСухов-т6щ 2 жыл бұрын
Ты хорош !)
@braininasquare2199
@braininasquare2199 2 жыл бұрын
Через фильтр большой список становится далеко не быстрым для сортировки
@Tamagochi4x4
@Tamagochi4x4 4 ай бұрын
Что это за курс на степике?
@vivacuba1990
@vivacuba1990 3 жыл бұрын
ясно и понятно...
@edgull_tlt
@edgull_tlt 3 жыл бұрын
Спасибо
@Nikbleat
@Nikbleat 2 жыл бұрын
Такой вопрос, несколько глупый может быть, но для меня пока актуальный. Почему алгоритм является более быстрым, если в обычной сортировке, методом перебора всех элементов и перестановки позиций, так же проверяется каждый элемент, но в этом методе ещё больше действий кроме перебора элементов? И это ещё не говоря о вложенности, которая при огромных массивах вообще может нехило занять память.
@ҒалымжанБерікұлы
@ҒалымжанБерікұлы 2 жыл бұрын
из-за рекурсии думаю
@MrFrimko
@MrFrimko Жыл бұрын
количество этих самых переборов другое. попробуй руками отсортировать список пузырьком и квиксортом, считая количество сравнений и перестановок. что бы разница была видна, список побольше взять, 7+ элементов
@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
@obe1313
@obe1313 4 жыл бұрын
зачем 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 4 жыл бұрын
так был же пример, а если ты выбрал в качестве ключевого элемента семерку, а у тебя в списке 30 семерок? Остальные семерки в какую сторону пойдут в right или left?
@obe1313
@obe1313 4 жыл бұрын
Al Zhuch делаешь тогда меньше либо равно в left, либо наоборот в right
@arxxximed
@arxxximed 4 жыл бұрын
@@obe1313 И можешь столкнуться с бесконечным циклом )))))) Ты попробуй написать эту прогу
@gameplays_from_hdd
@gameplays_from_hdd 3 жыл бұрын
@@arxxximed, каким образом там бесконечный цикл появляется?
@ГвидоПитон
@ГвидоПитон 2 жыл бұрын
программирование не твое, иди в начальники)
@tumka6988
@tumka6988 3 жыл бұрын
сортировка летит на массиве из равных элементов
@vetenskap1573
@vetenskap1573 2 жыл бұрын
У меня вопрос возник, а почему все эти супер пупер алгоритмы изначально не встроить в языке программирования в качестве встроенных функций ? Почему нужно свои костыли делать ?
@MrFrimko
@MrFrimko Жыл бұрын
так они есть. алгоритмы надо изучать не для того что их самому писать, а что понимать как работает то что уже написано
@Al-en6nj
@Al-en6nj 4 жыл бұрын
Быстрая сортировка ---> sort(....)
@trahar
@trahar 4 жыл бұрын
можешь отписаться от канала и больше не смотреть никаких материалов на тему сортировки, раз такой умник
@justalpaca4943
@justalpaca4943 3 жыл бұрын
Ахахах, программист нашелся... Задача не отсортировать что-то а понять принцип работы данного алгоритма. Как минимум по твоему комментарию можно прийти к выводу что программирование это не твоё. Не знаю, займись чем-нибудь другим.
@WinchesterD
@WinchesterD 3 жыл бұрын
Эх, кто бы ещё объяснил, зачем знать алгоритмы сортировки разработчику на Python, если встроенный метод прекрасно справляется с задачей.
@Nikbleat
@Nikbleat 2 жыл бұрын
Этим вопросом ты должен был озадачиться ещё перед изучением алгоритмов
@ymnop9652
@ymnop9652 Жыл бұрын
Нет универсального алгоритма, и не смотря на то, что в питоне умный сортировщик и он использует несколько алгоритмов, возможна ситуация когда тебе для оптимального решения текущей задачи нужен конкретный алгоритм сортировки, для этого нужно знать алгоритмы сортировки, их слабые и сильные места. А тут задачу изменили нужный алгоритм из гугла не работает, его нужно чуть изменить под специфику задачи, скажем сделать не устойчивым и ещё что-то там. Теперь тебе нужно знать не только что существует такой алгоритм, но и как он работает и что нужно изменить в нём для решения проблемы. Алгоримы это история про эффективность, понимая как их делают такими быстрыми можно в принципе писать более чистый код, который легче читать ещё он будет быстрее и в нём не будет лишних условий\сомнительных решений. И даже решая другую задачу принцип решения алгоритмов может быть полезен: придумай наивное решение, разбей задачу, найди бутылочное горлышко, сделай рефакторинг -> повторяй до оптимального результата.
@CRESHT
@CRESHT 2 жыл бұрын
Объяснение хорошее, но код кошмар для новичков. Какая-то лябда, for - просто ужас. Как научиться сортировке если код не понятен ?
@fugas6258
@fugas6258 2 жыл бұрын
*ваавав*
@nicholasspezza9449
@nicholasspezza9449 Жыл бұрын
Ни про сложность по времени не рассказал, ни по памяти.
@zhanibeksapakov9084
@zhanibeksapakov9084 Жыл бұрын
спасибо
Сортировка пузырьком в python. Bubble sort in Python
14:27
The IMPOSSIBLE Puzzle..
00:55
Stokes Twins
Рет қаралды 194 МЛН
Smart Sigma Kid #funny #sigma
00:33
CRAZY GREAPA
Рет қаралды 28 МЛН
How To Choose Mac N Cheese Date Night.. 🧀
00:58
Jojo Sim
Рет қаралды 107 МЛН
Quicksort In Python Explained (With Example And Code)
14:13
FelixTechTips
Рет қаралды 158 М.
Рекурсия в Python
52:13
Python Russian
Рет қаралды 5 М.
Пишем и подробно разбираем алгоритм Quick Sort на JavaScript | Быстрая сортировка
32:24
Елена Литвинова — Искусство Веб-разработки 🛸
Рет қаралды 10 М.
Sort Lists with Heap Sort in Python
16:45
CodeSavant
Рет қаралды 40 М.
Sorting Algorithms Explained Visually
9:01
Beyond Fireship
Рет қаралды 552 М.
The IMPOSSIBLE Puzzle..
00:55
Stokes Twins
Рет қаралды 194 МЛН