#13. Быстрая сортировка Хоара | Алгоритмы на Python

  Рет қаралды 22,089

selfedu

selfedu

3 жыл бұрын

Рассказывается об одном из самых популярных алгоритмов быстрой сортировки массивов по Хоару. Приводятся особенности его работы и возможность сортировать непосредственно в исходном массиве. Представлена программа на языке Python.
algorithm-quick-sort.py: github.com/selfedu-rus/python...

Пікірлер: 34
@dimakovalenkov7835
@dimakovalenkov7835 3 жыл бұрын
1. рассказать про преимущества сортировки без создания дополнительных списков 2. создать по 3 списка на каждую итерацию(тремя циклами)
@user-oj9pb3bv5w
@user-oj9pb3bv5w 8 ай бұрын
вот пример с сортировкой на месте from random import randint def partition(array: list, left: int, right: int) -> int: rand = randint(left, right) array[rand], array[left] = array[left], array[rand] x = array[left] j = left for i in range(left + 1, right + 1): if array[i] None: if left < right: m = partition(array, left, right) quick_sort(array, left, m - 1) quick_sort(array, m + 1, right)
@user-hr1pd3ev8b
@user-hr1pd3ev8b 6 ай бұрын
@@user-oj9pb3bv5w Спасибо
@user-ym3yt1uq7s
@user-ym3yt1uq7s Жыл бұрын
Очень доходчиво и интересно спасибо Вам за труды
@deniskrepak
@deniskrepak 3 жыл бұрын
Очень понятно объясняете, спасибо Вам!
@rostislavmalyshev1775
@rostislavmalyshev1775 3 жыл бұрын
Спасибо. Как всегда The Best!
@friend1cat
@friend1cat 3 жыл бұрын
Спасибо, Сергей.
@user-ji5wf5ke4b
@user-ji5wf5ke4b 3 жыл бұрын
Благодарю за материал!
@kat_katchinskiy
@kat_katchinskiy 5 ай бұрын
на 9:53 не понял почему в конце двойка если массив отсортирован -_-
@YbisZX
@YbisZX 2 ай бұрын
Это на первой итерации. Нужно столько таких проходов пока не будет ни одной перестановки.
@mustafinabulhairc-0kn286
@mustafinabulhairc-0kn286 Жыл бұрын
спасибо, большое
@user-yp6yv2ub2u
@user-yp6yv2ub2u Жыл бұрын
Спасибо!!!
@trampika2013
@trampika2013 Жыл бұрын
thanks
@sevakvart1111
@sevakvart1111 3 жыл бұрын
Хороший урок
@zwerg6406
@zwerg6406 2 жыл бұрын
А почему при сортировке на месте остались 2 последних элемента неотсортированы? [...10, 2]
@selfedu_rus
@selfedu_rus 2 жыл бұрын
поторопился с перемещением указателя
@dvkonstantinov
@dvkonstantinov Жыл бұрын
@@selfedu_rus Нет, дело тут не в указателе. Нужно рекурсию вызывать
@user-ee1lx1pe7n
@user-ee1lx1pe7n 2 жыл бұрын
Спасибо огромное! А разве Python реализован не на C? Если мы говорим о реализации CPython. Почему вы говорите о C++? Расскажите, пожалуйста, это интересно.
@selfedu_rus
@selfedu_rus 2 жыл бұрын
Я, конечно, сам язык не разрабатывал )) но думаю, что его все-таки на С++ делали, т.к. сделать такую вещь без ООП - это подвиг )
@user-qh5fr3yo1w
@user-qh5fr3yo1w Жыл бұрын
Не очень понял но интересно.
@user-qd2yy7nw5m
@user-qd2yy7nw5m 2 ай бұрын
Написана сортировка с использованием памяти на создание дополнительных массивов. При том, что ранее было сказано, что одно из главных преимуществ быстрой сортировки - это минимальное задействование памяти. Я, конечно, понимаю, что так гораздо проще для восприятия, но, блин, этого же недостаточно. У меня просто накипело - я уже кучу ресурсов пересмотрел и везде объясняют, как попало. Это же один из самых важных алгоритмов, почему нельзя разобрать его нормально. Тем более он используется в стандартной сортировке Python. Сергей, вы очень хорошо объясняете, огромное вам спасибо за ваши труды. Многое изучил по вашим видео, вы сильно выделяетесь на общем фоне. Но этот плейлист с алгоритмами не самый удачный. Я понимаю, что тема объемная и сложная, но она основополагающая. И мне непонятно, почему даже вы не смогли нормально объяснить такие важные вещи. Если даже вы не смогли, то кто тогда сможет? :)
@sergeyv1534
@sergeyv1534 3 жыл бұрын
В качестве идеи - дополнить цикл лекций разбором применения метода list.sort() и функции sorted(list) с ключами.
@selfedu_rus
@selfedu_rus 3 жыл бұрын
Это уже есть: kzbin.info/www/bejne/q6fPfJaFiJmCh9k
@sergeyv1534
@sergeyv1534 3 жыл бұрын
@@selfedu_rus Упс, проглядел.
@user-ry2su4jo2l
@user-ry2su4jo2l Жыл бұрын
без рекурсии тоже работает def f_sort(l): if len(l) l[0]] return left + center + right
@medencev
@medencev Жыл бұрын
Однократное деление массива на три группы само по себе не отсортирует его (за исключением нескольких частных случаев). Рекурсия является залогом того, что массив поделится на группы равных элементов, которые в дальнейшем будут сгруппированы
@ymnop9652
@ymnop9652 Жыл бұрын
Как и сказали выше, рекурсия сортирует левый и правый массивы, без неё мы можем соединить левый неотсортированный, средний, и правый неотсортированный. пример: [3,2,5,8,7,1] где значение с которым сравниваем - 5 получим L = [3, 2, 1] M = [5] R = [8, 7], L + M + R = [3, 2, 1, 5, 8, 7]
@dmitrypenzar5229
@dmitrypenzar5229 2 жыл бұрын
быстрой сортировкой это не является (код, что написан). Это штука по логике будет медленнее по-человечески написанной MergeSort
@selfedu_rus
@selfedu_rus 2 жыл бұрын
Реализация на Python, конечно, медленнее, чем на С++. Здесь объясняется лишь алгоритм сортировки, не более того.
@dmitrypenzar5229
@dmitrypenzar5229 2 жыл бұрын
@@selfedu_rus проблема не в Python, а в том, как вы на нем написали. У Qsort вся идея в том, что вам НЕ нужно заводить дополнительную память
@selfedu_rus
@selfedu_rus 2 жыл бұрын
@@dmitrypenzar5229 Это да, я согласен! Ну, идея изложена, реализовать - дело техники )
@ymnop9652
@ymnop9652 Жыл бұрын
@@dmitrypenzar5229Но ведь на Left, MIddle, Rigth память в любом случае уйдёт?
@AnatoliyDekorstyle
@AnatoliyDekorstyle 6 ай бұрын
Вообще конечно реализация "Быстрых сортировок" массива через рекрсию - звучит даже смешно)) максимальная глубина рекурсии (по дефолту ~1000) не позволит сортировать массив с N выше 1000. То есть какие сотни тысяч или милионы)) Скорее упрощенная визуализация алгоритма...
@ekzzy9054
@ekzzy9054 4 ай бұрын
Разве? Глубина рекурсии в быстрой сортировке будет немного больше чем log2(N), что позволяет сортировать массивы под 2^1000, если брать 1000 за глубину рекурсии. Если я ошибаюсь, то поясните, пожалуйста.
Последний Закат Кота Макса...
00:21
Глеб Рандалайнен
Рет қаралды 2,6 МЛН
Teenagers Show Kindness by Repairing Grandmother's Old Fence #shorts
00:37
Fabiosa Best Lifehacks
Рет қаралды 42 МЛН
О, сосисочки! (Или корейская уличная еда?)
00:32
Кушать Хочу
Рет қаралды 6 МЛН
Did you find it?! 🤔✨✍️ #funnyart
00:11
Artistomg
Рет қаралды 114 МЛН
C# QuickSort Быстрая сортировка
21:32
codaza
Рет қаралды 28 М.
Последний Закат Кота Макса...
00:21
Глеб Рандалайнен
Рет қаралды 2,6 МЛН