Алгоритмы и структуры данных 6. Быстрая сортировка.

แชร์
ฝัง
  • เผยแพร่เมื่อ 20 ก.ค. 2024
  • Алгоритмы, структуры данных, программирование
    В видео подробно рассматриваются еще один алгоритм сортировки - быстрая сортировка.
    Если видео Вам понравилось, вступайте в группу vk: dsysoevprog
    Подписывайтесь на страничку в facebook: / dsysoevprog
    Полезные ресурсы:
    1. Портал университета ИТМО, посвященный алгоритмам и структурам данных: neerc.ifmo.ru/wiki/index.php?t...
    2. Т.Кормен, Ч.Лейзерсон, Р.Ривест, К.Штайн - Алгоритмы. Построение и анализ. (Книга, легко гуглится)

ความคิดเห็น • 37

  • @LVS-UA
    @LVS-UA ปีที่แล้ว +2

    Шикарное объяснение, спасибо Вам.

  • @ivanbozhko6747
    @ivanbozhko6747 3 ปีที่แล้ว +8

    Спасибо Вам, все понятно)

  • @palenshetygenshe
    @palenshetygenshe 4 ปีที่แล้ว +9

    Круто. Спасибо.

  • @Arun-to3su
    @Arun-to3su ปีที่แล้ว

    Лучшее объяснение, что я видел. Спасибо!

  • @arsfaraway
    @arsfaraway 2 ปีที่แล้ว +1

    Объясняете очень понятно)

  • @vladimireliseev7602
    @vladimireliseev7602 2 ปีที่แล้ว +1

    Привет!
    Мне нравиться твоя подача материала.
    И хочется, чтобы ты разобрал:
    1. Алгоритмы на графах
    2. Бинарные деревья, черно-красные деревья
    3. Разобрать бы кучу
    4. Жадные алгоритмы

  • @foxypahod
    @foxypahod 2 ปีที่แล้ว +9

    Лучшее пояснение из тех что нашёл!)
    Спасибо)

  • @rastr__9042
    @rastr__9042 3 ปีที่แล้ว +1

    Огромное спасибо!

  • @olegpol1440
    @olegpol1440 ปีที่แล้ว +1

    Я вот не пойму, когда индексы сходятся посередине получается мы меняем одно и то же число само на себя

  • @malferov
    @malferov ปีที่แล้ว +1

    Базовый случай рекурсии не сработает, если придет пустой массив. Поэтому корректный базовый случай можно сформулировать как: массив с одним элементом или пустой массив. Нет?

    • @DanilaSysoev
      @DanilaSysoev  ปีที่แล้ว +1

      Да, вы абсолютно правы. Этот случай я упустил из виду.

  • @AlexTsiklov
    @AlexTsiklov ปีที่แล้ว

    Хорош, спасибо

  • @ProgrammerFlunt
    @ProgrammerFlunt 11 หลายเดือนก่อน

    Спасибо!

  • @user-vc5nj9zd6i
    @user-vc5nj9zd6i 2 ปีที่แล้ว +2

    Спасибо. Википедия и ещё чей-то перевод не дали понимания. Вы наглядно объяснили алгоритм, и теперь я его никогда не забуду.
    Что за "О большое"? (Ладно, матан сам изучу)

    • @astkh4381
      @astkh4381 ปีที่แล้ว

      там от матана ничего нет

  • @sanya50us
    @sanya50us 2 ปีที่แล้ว

    Ничего не понятно, но очень интересно)

  • @SEGAdreamCaste
    @SEGAdreamCaste 2 ปีที่แล้ว

    Представленный алгоритм некорректный, если опорный элемент будет самым минимальным то уже на первом этапе мы не сможем перемещать элементы.
    В видео на 2 этапе если массив был бы [ 5, 1, 2 , 6] 5>1 и 6>1, 5>1 и 2>1. получается ничего не перемещаем.

    • @DanilaSysoev
      @DanilaSysoev  2 ปีที่แล้ว

      Вы неправы. Согласно описанному алгоритму будет происходить следующее.
      5 >= 1, соответственно L останавливается на 5, дальше R движется влево, проходит 6 и 2 и останавливается на 1, т. к. 1

  • @user-uf9wf2sg4w
    @user-uf9wf2sg4w ปีที่แล้ว

    Помогитееее
    Почему для [2 9 0 -100 50 4 -2] не работает?

  • @artemlobanchikov2270
    @artemlobanchikov2270 ปีที่แล้ว

    почему на 3:36 у тебя L + R \ 2 это восемь? Почему в 2. числа перепрыгнули и теперь в L + R \ 2 единица вообще?

    • @DanilaSysoev
      @DanilaSysoev  ปีที่แล้ว

      1. Потому что в средней ячейке оказалась восьмерка. Пример такой. На другом примере могло бы быть другое число.
      2. На втором рисунке показана конечная конфигурация, которая получается после распределения элементов согласно описанному правилу.

  • @wolf_code
    @wolf_code 2 ปีที่แล้ว +1

    Отличное видео, тут еще по сортировке видео: th-cam.com/video/M6iMFWxExAU/w-d-xo.html

  • @artemlobanchikov2270
    @artemlobanchikov2270 ปีที่แล้ว

    Зачем нужен L элемент если он всегда в массиве по нулевому индексу?

    • @DanilaSysoev
      @DanilaSysoev  ปีที่แล้ว

      Он по нулевому только на старте. Потом может меняться.

  • @user-vc2xv4xp1j
    @user-vc2xv4xp1j 2 ปีที่แล้ว

    Не корректную версию квиксорта автор предоставил. На иных значениях представленный алгоритм не до конца сортирует

    • @DanilaSysoev
      @DanilaSysoev  2 ปีที่แล้ว +1

      Прошу привести пример такого набора данных, и на каком этапе алгоритм сломается.

    • @n1k1ta73
      @n1k1ta73 2 ปีที่แล้ว +1

      @@DanilaSysoev Алгоритм действительно изложен некорректно. Вы упустили ситуацию с равенством опорного элемента и текущего сравниваемого. Казалось бы, что может быть проще, добавить знак равно в одно из сравнений. К примеру, когда мы идем слева на право мы ещем элементы, которые больше опорного, а когда идем с право на лево - элементы меньше, либо равно опорному.
      А теперь попробуйте применить этот алгоритм для сортировки массива [2, 3, 4, 7, 5, 6, 1]. Для первого прохода по вашей методике выбран опорный элемент 7. Как отработает ваш алгоритм?
      P.S. Я сам работал преподателем в вузе и понимаю что там не хватает практики. Поэтому я рекомендую писать на все тести. Попробуйте взять любой язык программирования и сгенерировать массив на 1000 элементов, а после сортировки пройти в цикле и проверить, что каждый элемент меньше следующего.

    • @DanilaSysoev
      @DanilaSysoev  2 ปีที่แล้ว

      @@n1k1ta73
      Отвечая на вопрос, как отработает алгоритм - он отсортирует массив.
      Вот поэтапный разбор процесса сортировки
      2 3 4 [7] 5 6 [1] - опорный 7
      l r
      2 3 4 1 5 6 7
      r l
      -----------------
      2 3 [4] [1] 5 6 - опорный 4
      l r
      2 3 1 4 5 6
      r l
      -----------------
      2 [3] [1] - опорный 3
      l r
      2 1 3
      r l
      -----------------
      [2] [1] - опорный 2
      l r
      1 2
      r l

      Итог
      1 2 3 4 5 6 7
      (4 5 6 не расписывал, там все упорядочено и не будет перемещаться)

    • @DanilaSysoev
      @DanilaSysoev  2 ปีที่แล้ว +1

      @@n1k1ta73 Вы, вероятно, не очень внимательно смотрели видео. указатели справа и слева останавливаются на элементах >= и

  • @euwaq
    @euwaq 3 ปีที่แล้ว

    Как найти границу разбиения? До меня всё не доходит.

    • @frhadlizad2013
      @frhadlizad2013 3 ปีที่แล้ว +1

      Как мы поняли из урока, то те элементы которые больше опорного элемента, они собираются справа от опорного элемента, а те которые меньше либо равны, те собираются левее от опорного элемента. Скажу так. Там где закончилось число которое меньше(либо равно) опорного, и там где начинаются числа больше опорного, вот это и есть граница разбиения.

    • @user-ho7tj6es7v
      @user-ho7tj6es7v 2 ปีที่แล้ว

      Граница разбиения = (L+R)/2, т.к индексация массива начинается с нуля и L=0 и R=7 соответственно, то (L+R)/2=3.5 (далее идет округление в меньшую сторону). Получается индекс массива равен 3, а в этой ячейке число 8.

  • @rfak05
    @rfak05 ปีที่แล้ว

    Жаль, что забросил канал

    • @DanilaSysoev
      @DanilaSysoev  ปีที่แล้ว +1

      В ближайшее время выход видео на канале будет возобновлен.

    • @rfak05
      @rfak05 ปีที่แล้ว

      @@DanilaSysoev хорошая новость.