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

Sdílet
Vložit
  • čas přidán 4. 03. 2021
  • Рассказывается об одном из самых популярных алгоритмов быстрой сортировки массивов по Хоару. Приводятся особенности его работы и возможность сортировать непосредственно в исходном массиве. Представлена программа на языке Python.
    algorithm-quick-sort.py: github.com/selfedu-rus/python...

Komentáře • 34

  • @dimakovalenkov7835
    @dimakovalenkov7835 Před 3 lety +54

    1. рассказать про преимущества сортировки без создания дополнительных списков
    2. создать по 3 списка на каждую итерацию(тремя циклами)

    • @user-oj9pb3bv5w
      @user-oj9pb3bv5w Před 11 měsíci +2

      вот пример с сортировкой на месте
      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 Před 8 měsíci +1

      @@user-oj9pb3bv5w Спасибо

  • @user-ym3yt1uq7s
    @user-ym3yt1uq7s Před rokem +1

    Очень доходчиво и интересно спасибо Вам за труды

  • @deniskrepak
    @deniskrepak Před 3 lety +1

    Очень понятно объясняете, спасибо Вам!

  • @friend1cat
    @friend1cat Před 3 lety +8

    Спасибо, Сергей.

  • @rostislavmalyshev1775
    @rostislavmalyshev1775 Před 3 lety +3

    Спасибо. Как всегда The Best!

  • @user-ji5wf5ke4b
    @user-ji5wf5ke4b Před 3 lety +3

    Благодарю за материал!

  • @mustafinabulhairc-0kn286

    спасибо, большое

  • @user-yp6yv2ub2u
    @user-yp6yv2ub2u Před rokem +1

    Спасибо!!!

  • @sevakvart1111
    @sevakvart1111 Před 3 lety +3

    Хороший урок

  • @trampika2013
    @trampika2013 Před rokem +1

    thanks

  • @user-ee1lx1pe7n
    @user-ee1lx1pe7n Před 2 lety +2

    Спасибо огромное!
    А разве Python реализован не на C? Если мы говорим о реализации CPython. Почему вы говорите о C++?
    Расскажите, пожалуйста, это интересно.

    • @selfedu_rus
      @selfedu_rus  Před 2 lety +3

      Я, конечно, сам язык не разрабатывал )) но думаю, что его все-таки на С++ делали, т.к. сделать такую вещь без ООП - это подвиг )

  • @user-qh5fr3yo1w
    @user-qh5fr3yo1w Před rokem +1

    Не очень понял но интересно.

  • @zwerg6406
    @zwerg6406 Před 2 lety +4

    А почему при сортировке на месте остались 2 последних элемента неотсортированы? [...10, 2]

    • @selfedu_rus
      @selfedu_rus  Před 2 lety +2

      поторопился с перемещением указателя

    • @dvkonstantinov
      @dvkonstantinov Před 2 lety

      @@selfedu_rus Нет, дело тут не в указателе. Нужно рекурсию вызывать

  • @alenazhukova8175
    @alenazhukova8175 Před měsícem +1

    Здесь не происходит inplace сортировки

  • @user-lv9de4hg9w
    @user-lv9de4hg9w Před měsícem +1

    а как случайный выбор должен помочь ускорить процесс сортировки. Если случайный выбор будет все попадать на самые малые значения в "гиперсписках", то максимальная сложность все равно будет оN^2

    • @selfedu_rus
      @selfedu_rus  Před měsícem

      Все верно, но вероятность такого события крайне мала.

  • @sergeyv1534
    @sergeyv1534 Před 3 lety +1

    В качестве идеи - дополнить цикл лекций разбором применения метода list.sort() и функции sorted(list) с ключами.

    • @selfedu_rus
      @selfedu_rus  Před 3 lety +2

      Это уже есть: czcams.com/video/uvlKcOS4OQw/video.html

    • @sergeyv1534
      @sergeyv1534 Před 3 lety

      @@selfedu_rus Упс, проглядел.

  • @user-ry2su4jo2l
    @user-ry2su4jo2l Před rokem +2

    без рекурсии тоже работает
    def f_sort(l):
    if len(l) l[0]]

    return left + center + right

    • @medencev
      @medencev Před rokem

      Однократное деление массива на три группы само по себе не отсортирует его (за исключением нескольких частных случаев). Рекурсия является залогом того, что массив поделится на группы равных элементов, которые в дальнейшем будут сгруппированы

    • @ymnop9652
      @ymnop9652 Před rokem

      Как и сказали выше, рекурсия сортирует левый и правый массивы, без неё мы можем соединить левый неотсортированный, средний, и правый неотсортированный. пример: [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 Před 2 lety

    быстрой сортировкой это не является (код, что написан). Это штука по логике будет медленнее по-человечески написанной MergeSort

    • @selfedu_rus
      @selfedu_rus  Před 2 lety

      Реализация на Python, конечно, медленнее, чем на С++. Здесь объясняется лишь алгоритм сортировки, не более того.

    • @dmitrypenzar5229
      @dmitrypenzar5229 Před 2 lety +1

      @@selfedu_rus проблема не в Python, а в том, как вы на нем написали. У Qsort вся идея в том, что вам НЕ нужно заводить дополнительную память

    • @selfedu_rus
      @selfedu_rus  Před 2 lety

      @@dmitrypenzar5229 Это да, я согласен! Ну, идея изложена, реализовать - дело техники )

    • @ymnop9652
      @ymnop9652 Před rokem

      @@dmitrypenzar5229Но ведь на Left, MIddle, Rigth память в любом случае уйдёт?

  • @AnatoliyDekorstyle
    @AnatoliyDekorstyle Před 8 měsíci

    Вообще конечно реализация "Быстрых сортировок" массива через рекрсию - звучит даже смешно)) максимальная глубина рекурсии (по дефолту ~1000) не позволит сортировать массив с N выше 1000. То есть какие сотни тысяч или милионы)) Скорее упрощенная визуализация алгоритма...

    • @ekzzyy
      @ekzzyy Před 7 měsíci

      Разве? Глубина рекурсии в быстрой сортировке будет немного больше чем log2(N), что позволяет сортировать массивы под 2^1000, если брать 1000 за глубину рекурсии.
      Если я ошибаюсь, то поясните, пожалуйста.