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

  Рет қаралды 23,642

selfedu

selfedu

Күн бұрын

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

Пікірлер: 34
@dimakovalenkov7835
@dimakovalenkov7835 3 жыл бұрын
1. рассказать про преимущества сортировки без создания дополнительных списков 2. создать по 3 списка на каждую итерацию(тремя циклами)
@ДмитрийПименов-ж5ш
@ДмитрийПименов-ж5ш Жыл бұрын
вот пример с сортировкой на месте 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)
@АлексейЛевицкий-ъ5ф
@АлексейЛевицкий-ъ5ф 10 ай бұрын
@@ДмитрийПименов-ж5ш Спасибо
@friend1cat
@friend1cat 3 жыл бұрын
Спасибо, Сергей.
@СергейНауменко-ь6н
@СергейНауменко-ь6н Жыл бұрын
Очень доходчиво и интересно спасибо Вам за труды
@rostislavmalyshev1775
@rostislavmalyshev1775 3 жыл бұрын
Спасибо. Как всегда The Best!
@deniskrepak
@deniskrepak 3 жыл бұрын
Очень понятно объясняете, спасибо Вам!
@user-ji5wf5ke4b
@user-ji5wf5ke4b 3 жыл бұрын
Благодарю за материал!
@mustafinabulhairc-0kn286
@mustafinabulhairc-0kn286 Жыл бұрын
спасибо, большое
@НикитаХлобыстов-г2й
@НикитаХлобыстов-г2й 3 ай бұрын
а как случайный выбор должен помочь ускорить процесс сортировки. Если случайный выбор будет все попадать на самые малые значения в "гиперсписках", то максимальная сложность все равно будет оN^2
@selfedu_rus
@selfedu_rus 3 ай бұрын
Все верно, но вероятность такого события крайне мала.
@alenazhukova8175
@alenazhukova8175 2 ай бұрын
Здесь не происходит inplace сортировки
@МихаилПеров-у1ю
@МихаилПеров-у1ю Жыл бұрын
Спасибо!!!
@zwerg6406
@zwerg6406 2 жыл бұрын
А почему при сортировке на месте остались 2 последних элемента неотсортированы? [...10, 2]
@selfedu_rus
@selfedu_rus 2 жыл бұрын
поторопился с перемещением указателя
@dvkonstantinov
@dvkonstantinov 2 жыл бұрын
@@selfedu_rus Нет, дело тут не в указателе. Нужно рекурсию вызывать
@ЕрвандАгаджанян-в3к
@ЕрвандАгаджанян-в3к 2 жыл бұрын
Спасибо огромное! А разве Python реализован не на C? Если мы говорим о реализации CPython. Почему вы говорите о C++? Расскажите, пожалуйста, это интересно.
@selfedu_rus
@selfedu_rus 2 жыл бұрын
Я, конечно, сам язык не разрабатывал )) но думаю, что его все-таки на С++ делали, т.к. сделать такую вещь без ООП - это подвиг )
@sevakvart1111
@sevakvart1111 3 жыл бұрын
Хороший урок
@Борис-ц6ю6ж
@Борис-ц6ю6ж Жыл бұрын
без рекурсии тоже работает 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]
@trampika2013
@trampika2013 2 жыл бұрын
thanks
@СергейКондулуков-з9ч
@СергейКондулуков-з9ч Жыл бұрын
Не очень понял но интересно.
@sergeyv1534
@sergeyv1534 3 жыл бұрын
В качестве идеи - дополнить цикл лекций разбором применения метода list.sort() и функции sorted(list) с ключами.
@selfedu_rus
@selfedu_rus 3 жыл бұрын
Это уже есть: kzbin.info/www/bejne/q6fPfJaFiJmCh9k
@sergeyv1534
@sergeyv1534 3 жыл бұрын
@@selfedu_rus Упс, проглядел.
@dmitrypenzar5229
@dmitrypenzar5229 3 жыл бұрын
быстрой сортировкой это не является (код, что написан). Это штука по логике будет медленнее по-человечески написанной MergeSort
@selfedu_rus
@selfedu_rus 3 жыл бұрын
Реализация на Python, конечно, медленнее, чем на С++. Здесь объясняется лишь алгоритм сортировки, не более того.
@dmitrypenzar5229
@dmitrypenzar5229 3 жыл бұрын
@@selfedu_rus проблема не в Python, а в том, как вы на нем написали. У Qsort вся идея в том, что вам НЕ нужно заводить дополнительную память
@selfedu_rus
@selfedu_rus 3 жыл бұрын
@@dmitrypenzar5229 Это да, я согласен! Ну, идея изложена, реализовать - дело техники )
@ymnop9652
@ymnop9652 Жыл бұрын
@@dmitrypenzar5229Но ведь на Left, MIddle, Rigth память в любом случае уйдёт?
@AnatoliyDekorstyle
@AnatoliyDekorstyle 10 ай бұрын
Вообще конечно реализация "Быстрых сортировок" массива через рекрсию - звучит даже смешно)) максимальная глубина рекурсии (по дефолту ~1000) не позволит сортировать массив с N выше 1000. То есть какие сотни тысяч или милионы)) Скорее упрощенная визуализация алгоритма...
@ekzzyy
@ekzzyy 8 ай бұрын
Разве? Глубина рекурсии в быстрой сортировке будет немного больше чем log2(N), что позволяет сортировать массивы под 2^1000, если брать 1000 за глубину рекурсии. Если я ошибаюсь, то поясните, пожалуйста.
Je peux le faire
00:13
Daniil le Russe
Рет қаралды 21 МЛН
МЕБЕЛЬ ВЫДАСТ СОТРУДНИКАМ ПОЛИЦИИ ТАБЕЛЬНУЮ МЕБЕЛЬ
00:20
Worst flight ever
00:55
Adam W
Рет қаралды 10 МЛН
Organiza tus proyectos como un PRO con Kanboard en Ubuntu Server
22:55
Manuel Cabrera Caballero
Рет қаралды 44
Алгоритмы на Python 3. Лекция №1
1:20:50
Тимофей Хирьянов
Рет қаралды 5 МЛН
Je peux le faire
00:13
Daniil le Russe
Рет қаралды 21 МЛН