Спасибо за видео. Я проверил два способа: 1) с использованием метода filter 2) генератор списка через [el for el in arr if el (, ==) pivot] Вывод: второй метод быстрее, так как не идет вызов функций (а такая операция в питоне происходит не слишком быстро). Возможно, в другом языке ситуация будет иная.
@ТигранСаркисян-ф3и Жыл бұрын
Спасибо, Егор, по моему самое адекватное объяснение. И слушать приятно)).
@ДмитрийСмолянников3 жыл бұрын
Спасибо! Наконец-то понял. Отдельная благодарность за демонстрацию работы с отладчиком.
@TIMSYSTEM4 жыл бұрын
Выглядит как магия!
@barbaferam47622 ай бұрын
Я использую combosort годами, он прекрасно вписьівается в целочисленную математику, и не изпользует много оперативки и стека.
@vladislav.ivanov Жыл бұрын
Спасибо, наконец-то разобрался с рекурсией
@evollt3 жыл бұрын
красавчик. Объяснил все на понятном языке. Недавно начал читать книгу:"грокаем алгоритмы",вот и не понял алгоритм быстрой сортировки,а ты все прям разжевал как надо. Подписочка оформлена!
@ЧувакИзКосмоса Жыл бұрын
скажите, товарищи, а такого рода многократные пробежки не тратят ли больше памяти и времени? я понимаю, это генераторы, однако в каждом следующем генераторе мы проверяем каждый элемент повторно! не эффективнее ли запустить один цикл и в нём проверять величину переменной? for i in lst: if i < base: less.append(i) elif i > base: bigger.append(i) else: centre.append(i) или получается одно и то же, ведь мы каждый элемент в худшем случае проверяем дважды?
@МагомедНурмагомедов-л3п2 жыл бұрын
Лучшее объяснение что нашел на ютубе. Благодарю
@doloidiktatorov4 жыл бұрын
Огромное спасибо за алгоритмы.
@arxxximed4 жыл бұрын
Вы создаете на каждой итерации рекурсии новые списки- при больших начальных списках память уйдет очень быстро. Изначальный алгоритм быстрой сортировки - эта работа с указателями.
@trahar4 жыл бұрын
он изначально сказал "один из способов быстрой сортировки", что это подразумевает под собой?!?!? способ на то и способ, что подходит для определённых ситуаций, когда список маленький - пожалуйста, пользуйся! большой?! ищи идею лучше!
@arxxximed4 жыл бұрын
@@trahar отчасти согласен с вашим рассуждением. Отчасти нет. 1. По поводу лучшего способа - лучший способ на сегодняшний момент - это как раз пользоваться встроенными средствами языка. 2. Здесь мы разбираем классические алгоритмы. Соответственно было бы не плохо указать плюсы и минусы этих алгоритмов. Плюс Quick search как раз таки в том, что он должен работать с одним списком как объект, не создавая новых, и не захламляя память. Автор очень хорошо и понятно объяснил суть работы алгоритма на примере создания списков... Но наверное стоило бы потом и перейти на классическую его реализацию... С объяснением и разбором.
@trahar4 жыл бұрын
@@arxxximed это да! так-то и нужно
@dimakovalenkov78353 жыл бұрын
+ каждый раз список перебирается по 3 раза по итогу сортировка замедляется в 3 раза теперь это медленная сортировка = )
@userr191943 жыл бұрын
_Большое спасибо за урок!_ Этот понятнее, чем предыдущий)
@sergeyl1223 Жыл бұрын
elem = s[len(s)//2] вот так должно быть. А иначе при выборе элементов > 2 ошибку выбивает
@ymnop9652 Жыл бұрын
Уф, целых три цикла перебора вместо одного, супер эффективно:D
@arxxximed4 жыл бұрын
А в целом очень хорошо и понятно объясняете
@begula_chan Жыл бұрын
Спасибо!
@doordie6341Ай бұрын
есть разница в скорости выполнения алгоритма исходя из того какой элемент брать за базовый?
@codetoday1055 Жыл бұрын
Яке це швидке сортування якщо ви створюєте нові масиви. Тобто відміність швидкого сортуввння від сортування злиттям зникає. (їх відміність в просторовій суладності)
@АлексейЮдин-и9д6 ай бұрын
В "Грохаем алгоритмы" есть фраза - "Если вы всегда будете выбирать опорным элементом случайный элемент в массиве, бы страя сортировка в среднем завершится за время О(п log п). " - при этом результирующий массив отличается по количеству элементов от искомого (по вашей программе)((( Как это исправить??
@ГеоргийЗагорский-э5к2 жыл бұрын
Вы в самом начале ролика сказали что можно брать любой элемент. Это явно ошибка потому что при увеличении размеров списка и например если мы берем первый элемент - скорость вашей работы будет заведомо меньше чем при серединном элементе. Это можно явно заметить при быстрой сортировке с разбиением дейкстры. Если в этом случае вы берете первый элемент - у вас идет сильный упадок скорости. Этот момент нужно подметить и учесть что каждый элемент должен быть - element = array[len(array) // 2] - вот в таком случае на каждой итерации будет решать за nlogn Учтите это после просмотра!
@begula_chan Жыл бұрын
А выбор рандомного опорного элемента тоже будет занимать nlogn?
@ИгорьСухов-т6щ2 жыл бұрын
Ты хорош !)
@braininasquare21992 жыл бұрын
Через фильтр большой список становится далеко не быстрым для сортировки
@Tamagochi4x44 ай бұрын
Что это за курс на степике?
@vivacuba19903 жыл бұрын
ясно и понятно...
@edgull_tlt3 жыл бұрын
Спасибо
@Nikbleat2 жыл бұрын
Такой вопрос, несколько глупый может быть, но для меня пока актуальный. Почему алгоритм является более быстрым, если в обычной сортировке, методом перебора всех элементов и перестановки позиций, так же проверяется каждый элемент, но в этом методе ещё больше действий кроме перебора элементов? И это ещё не говоря о вложенности, которая при огромных массивах вообще может нехило занять память.
@ҒалымжанБерікұлы2 жыл бұрын
из-за рекурсии думаю
@MrFrimko Жыл бұрын
количество этих самых переборов другое. попробуй руками отсортировать список пузырьком и квиксортом, считая количество сравнений и перестановок. что бы разница была видна, список побольше взять, 7+ элементов
@Strongflight2 жыл бұрын
Команда на выход приводит к ошибке. Немного переделал:
@Strongflight2 жыл бұрын
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
@obe13134 жыл бұрын
зачем 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)
@arxxximed4 жыл бұрын
так был же пример, а если ты выбрал в качестве ключевого элемента семерку, а у тебя в списке 30 семерок? Остальные семерки в какую сторону пойдут в right или left?
@obe13134 жыл бұрын
Al Zhuch делаешь тогда меньше либо равно в left, либо наоборот в right
@arxxximed4 жыл бұрын
@@obe1313 И можешь столкнуться с бесконечным циклом )))))) Ты попробуй написать эту прогу
@gameplays_from_hdd3 жыл бұрын
@@arxxximed, каким образом там бесконечный цикл появляется?
@ГвидоПитон2 жыл бұрын
программирование не твое, иди в начальники)
@tumka69883 жыл бұрын
сортировка летит на массиве из равных элементов
@vetenskap15732 жыл бұрын
У меня вопрос возник, а почему все эти супер пупер алгоритмы изначально не встроить в языке программирования в качестве встроенных функций ? Почему нужно свои костыли делать ?
@MrFrimko Жыл бұрын
так они есть. алгоритмы надо изучать не для того что их самому писать, а что понимать как работает то что уже написано
@Al-en6nj4 жыл бұрын
Быстрая сортировка ---> sort(....)
@trahar4 жыл бұрын
можешь отписаться от канала и больше не смотреть никаких материалов на тему сортировки, раз такой умник
@justalpaca49433 жыл бұрын
Ахахах, программист нашелся... Задача не отсортировать что-то а понять принцип работы данного алгоритма. Как минимум по твоему комментарию можно прийти к выводу что программирование это не твоё. Не знаю, займись чем-нибудь другим.
@WinchesterD3 жыл бұрын
Эх, кто бы ещё объяснил, зачем знать алгоритмы сортировки разработчику на Python, если встроенный метод прекрасно справляется с задачей.
@Nikbleat2 жыл бұрын
Этим вопросом ты должен был озадачиться ещё перед изучением алгоритмов
@ymnop9652 Жыл бұрын
Нет универсального алгоритма, и не смотря на то, что в питоне умный сортировщик и он использует несколько алгоритмов, возможна ситуация когда тебе для оптимального решения текущей задачи нужен конкретный алгоритм сортировки, для этого нужно знать алгоритмы сортировки, их слабые и сильные места. А тут задачу изменили нужный алгоритм из гугла не работает, его нужно чуть изменить под специфику задачи, скажем сделать не устойчивым и ещё что-то там. Теперь тебе нужно знать не только что существует такой алгоритм, но и как он работает и что нужно изменить в нём для решения проблемы. Алгоримы это история про эффективность, понимая как их делают такими быстрыми можно в принципе писать более чистый код, который легче читать ещё он будет быстрее и в нём не будет лишних условий\сомнительных решений. И даже решая другую задачу принцип решения алгоритмов может быть полезен: придумай наивное решение, разбей задачу, найди бутылочное горлышко, сделай рефакторинг -> повторяй до оптимального результата.
@CRESHT2 жыл бұрын
Объяснение хорошее, но код кошмар для новичков. Какая-то лябда, for - просто ужас. Как научиться сортировке если код не понятен ?
@fugas62582 жыл бұрын
*ваавав*
@nicholasspezza9449 Жыл бұрын
Ни про сложность по времени не рассказал, ни по памяти.