C# QuickSort Быстрая сортировка

Sdílet
Vložit
  • čas přidán 5. 07. 2024
  • В данном ролике мы поговорим об одном из самых популярных алгоритмов сортировки массивов - быстрая сортировка QuickSort (или быстрая сортировка Хоара). Рассмотрим концепцию алгоритма и посмотрим на отличную визуализацию, где всё станет понятно 🙂 В конце ролика мы реализуем алгоритм на языке C# и прочувствуем каждый шаг алгоритма в действии. Будет интересно!
    Исходный код проекта на GitHub: github.com/codaza/QuickSort
    Коллекция List: • C# List
    Telegram канал: t.me/codaza
    На кофе ☕️: pay.cloudtips.ru/p/179d0532
    Patreon: / codaza
    Boosty: boosty.to/codaza
    0:00 - Начало
    0:41 - Смысл алгоритмов сортировки
    1:22 - Виды алгоритмов сортировки
    2:59 - Тони Хоар - автор алгоритма QuickSort
    3:57 - Разделяй и властвуй
    4:49 - Концепция алгоритма QuickSort
    6:05 - QuickSort в действии
    8:40 - Оценка сложности алгоритма QuickSort
    11:01 - Реализуем алгоритм на языке программирования C#
    20:27 - Завершение
    #quicksort #быстраясортировка #алгоритмысортировки #csharp #сишарп #codaza

Komentáře • 81

  • @codaza-channel
    @codaza-channel  Před 2 lety +6

    Удобная навигация по видео :)
    0:00 - Начало
    0:41 - Смысл алгоритмов сортировки
    1:22 - Виды алгоритмов сортировки
    2:59 - Тони Хоар - автор алгоритма QuickSort
    3:57 - Разделяй и властвуй
    4:49 - Концепция алгоритма QuickSort
    6:05 - QuickSort в действии
    8:40 - Оценка сложности алгоритма QuickSort
    11:01 - Реализуем алгоритм на языке программирования C#
    20:27 - Завершение

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

      За навигацию отдельный плюс видео

  • @MariMaxVR
    @MariMaxVR Před rokem +16

    Было бы отлично от вас получить полный курс по C# от новичка до профессионала, будь он хоть платный я бы хотел у вас учиться.

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

    Отличный и доступный формат. Ждём новых роликов. Спасибо!

  • @marksreider7645
    @marksreider7645 Před 2 lety +7

    Спасибо за хорошую подачу материала!

  • @Alex_Beck
    @Alex_Beck Před rokem

    Действительно очень крутая подача!!! Звук, музыка, Анимация. Самое главное очень доходчиво ! Искал сортировку, подписался! Спасибо за видео))) Ждем еще контент! БОЛЬШОЕ спасибо!!!!!!!

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

    О, круто, спасибо! Вы разъяснили именно те моменты которые я не понимал.

  • @PAPAKOTT
    @PAPAKOTT Před 2 lety +8

    Выши ролики , это результат огромного труда. Спасибо за это.
    Очень понятно, доступно и красиво ))).
    Большое спасибо, ещё раз.

    • @codaza-channel
      @codaza-channel  Před 2 lety +3

      Благодарю за тёплый комментарий 🙂 Читая такие комментарии, понимаешь что нужно создавать ролики дальше.

  • @overhealer1
    @overhealer1 Před rokem +6

    Не совсем понятный нейминг в коде, вроде переменная пивот, но в ней хранится самый младший элемент, а сам пивот это array[maxIndex]. А в целом видео супер, спасибо!

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

    Очень хорошее объяснение. Спасибо!

  • @behemoth1621
    @behemoth1621 Před 3 měsíci

    Как и все другие материалы просто шикарны. А есть надежда что будет продолжение канала?

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

    Спасибо большое за видео!

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

    как же круто объяснил!!!

  • @Alkain18
    @Alkain18 Před rokem

    Шикарное видео! Спасибо!

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

    Спасибо большое, очень полезное видео. Долго не мог понять

  • @ym1288
    @ym1288 Před rokem

    вернулся через год чтобы пересмотреть и повторить. супер объяснение :)

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

    Спасибо за труд. Очень помогаеш!
    Продолжай пожалуйста и не забрасывай!

    • @codaza-channel
      @codaza-channel  Před 2 lety

      Благодарю! Очень рад, что контент помогает 👍

  • @anonim6364
    @anonim6364 Před rokem

    зачем я это под ночь посмотрел,теперь весь сон буду обдумывать, а так codaza огромное спасибо

  • @HDunno
    @HDunno Před rokem

    Спасибо большое!
    Хотелось бы увидеть видео про другие алгоритмы и структуры данных. Удачи!

  • @GGFXRDR
    @GGFXRDR Před 6 měsíci

    обьяснил лучше чем другие ютуберы по этой теме, респект

  • @user-yt5pl9wk3l
    @user-yt5pl9wk3l Před 2 lety +1

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

    • @codaza-channel
      @codaza-channel  Před 2 lety

      Благодарю за комментарий. Надеюсь, информация была полезной 🙂

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

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

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

    Отличное видео! Ждём новых роликов)

    • @codaza-channel
      @codaza-channel  Před 2 lety +1

      Спасибо за комментарий. Впереди много интересного 🙂

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

    спасибо, очень полезное видео.

    • @codaza-channel
      @codaza-channel  Před 2 lety

      Благодарю за комментарий. Рад, что информация оказалась полезной 🙂

  • @Spa1ke
    @Spa1ke Před 2 lety +8

    Нужна сортировка одно-, двух-, трёхмерных массивов, было бы полезно посмотреть такое видео

  • @dad912
    @dad912 Před rokem

    очень просто .....спс

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

    Деревья выражений было бы интересно посмотреть.

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

    Очень хорошо объяснил. Если есть видео про ret и рекурсию, то можно вставить ссылки

  • @VitVit312
    @VitVit312 Před 2 lety +6

    Я: Не могу понять, когда ютуб уже сообразит и начнёт тебя продвигать
    Ютуб: трясите задом и пускайте цветные сопли !

    • @codaza-channel
      @codaza-channel  Před 2 lety +3

      Да, ютуб имеет свои представления))
      Спасибо за комментарий, это точно оказывает положительное влияние на продвижение 🙂

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

    привет! расскажи про ENUM....

  • @PeterCargo
    @PeterCargo Před rokem +1

    С 15 минуты по 17 нет звука. А кажется, что там могли быть полезные комментарии по реализации.

  • @user-iv2kz5kh4t
    @user-iv2kz5kh4t Před rokem

    Я буду прав, если скажу, что на 36 строке (for (int i = minIndex; i < maxIndex; i++)) вместо "

  • @Moraru1992
    @Moraru1992 Před 2 lety

    🤗

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

    @codaza-channel Объясняешь очень хорошо, но есть деталь, в данной реализации быстрой сортировки выбор опорного элемента не происходит случайным образом. Выбор опорного элемента может действительно повлиять на производительность алгоритма быстрой сортировки.
    Выбор неэффективной стратегии опорного элемента может привести к плохой производительности, особенно в случаях, когда массив уже отсортирован или почти отсортирован. Например, если опорный элемент всегда выбирается как первый или последний элемент массива, и массив отсортирован по возрастанию или убыванию, комплексность быстрой сортировки может ухудшиться до O(n^2) вместо среднего случая сложности O(n log n).

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

    Упаковка обмена элементами в метод Swap и передача параметров по ссылке, ухудшает производительность быстрой сортировки. Сделал обмен без передачи по ссылке одним блоком кода, сделал серию тестов. Итог передача по ссылке замедляет сортировку на 10 -15%. при сортировке массива на миллион элементов.

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

    супер полезное видео и так мало просмотров

    • @codaza-channel
      @codaza-channel  Před 2 lety +1

      Благодарю за комментарий и рад, что информация из ролика оказалась полезной 🙂

  • @alexazimov420
    @alexazimov420 Před 2 lety

    Увеличить скорость можно параллельными процессами.

  • @user-yo7mw6oj4p
    @user-yo7mw6oj4p Před 2 lety +3

    А делегаты, события, интерфейсы, IoC и другие страшные вещи разбирать будите?

    • @codaza-channel
      @codaza-channel  Před 2 lety +4

      Да, думаю, обязательно поговорим об этом на канале 🙂

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

      ну это далеко не страшные вещи)) куда интереснее tpl, valoltile, Expression

  • @user-fv6jt7vf6k
    @user-fv6jt7vf6k Před 3 dny

    А зачем он нужен, если деградирует по скорости до n^2 в худшем случае, плюс неустойчив, требует доп. памяти как и слиянием, и придуман позже сортировки слиянием...?
    Да, еще требует отдельного алгоритма поиска опорного элемента.

  • @user-nw8sn5gf9e
    @user-nw8sn5gf9e Před rokem

    Есть вопрос , зачем результат метода "GetPivotIndex" помещать в переменную соответственно зачем его возвращать.
    У меня эта функция прекрасно работает с значением void без return pivot; и переменной в которую оно возвращаеться .
    Я что-то упускаю или это просто для наглядности ?

    • @user-iv2kz5kh4t
      @user-iv2kz5kh4t Před rokem

      В методе QuickSort происходит ветвление. дикое ветвление)) и для того, чтобы для каждой веточки была своя переменная pivotIndex, метод GetPivotIndex должен её возвращать. Я так понимаю. Но на дебаге этот вопрос не тестил.

  • @1ncludecpp656
    @1ncludecpp656 Před 2 lety

    Пива захотелось

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

    Я не совсем понимаю, каким образом мы получаем индекс пивота, есть ли какая-нибудь статья, которую можно прочитать повнимательней ?

    • @codaza-channel
      @codaza-channel  Před 2 lety

      Более основательно Вы можете ознакомиться с алгоритмом быстрой сортировки на wikipedia: en.wikipedia.org/wiki/Quicksort#:~:text=Quicksort%20is%20a%20divide%2Dand,sometimes%20called%20partition%2Dexchange%20sort.
      Вот тут еще достаточно подробно демонстрируются шаги реализации алгоритма: www.programiz.com/dsa/quick-sort

    • @sergeyz.5845
      @sergeyz.5845 Před rokem

      По сути мы просто сравниваем все элементы в заданном массиве с последним элементом. И если эти значения меньше или равны последнему элементу, то они перемещаются на позиции перед теми, которые оказались больше последнего элемента. Последний элемент тоже переместится, так как он равен по значению самому себе. Происходит это так: берем элемент, если он меньше или равен последнему, то пивот теперь становится на первую позицию(условно - граница между элементами, которые меньше и больше последнего) Берем второй элемент, например, он оказался больше. Тогда пивот остается на своем месте. И мы уже имеем два отсортированных элемента (второй элемент точно больше первого - мы это проверили). Дальше третий элемент, к примеру, меньше или равен последнему, тогда мы меняем местами второй и третий элемент, потому что второй точно больше третьего(мы это проверяем относительно значения в последнем элементе массива). И таким образом доходим до конца. Последний элемент наконец займет позицию пивота, тк он проходит по условию и равен самому себе.

    • @sergeyz.5845
      @sergeyz.5845 Před rokem

      Здесь одновременно происходит поиск пивота и перемещение элементов

  • @syrymjoli
    @syrymjoli Před rokem

    codazaaaa!)
    почему аза?) вы наверно уже гдето уже отвечали сори лень искать)

  • @sawa1976
    @sawa1976 Před rokem

    Дико извиняюсь за занудство, но разве цикл не лучше сделать до maxIndex -> for (int i = minIndex; i < maxIndex; i++), один цикл и лишнее сравнение можно сэкономить.

  • @dad912
    @dad912 Před rokem

    кстати если реф не ставить - метод сорт будет менять свои значения значения переменных а не значения в массиве - так что работать програмка не будет(((

  • @robles2145
    @robles2145 Před 2 lety

    6:26 важный шаг для понимания алгоритма просто упущен

    • @codaza-channel
      @codaza-channel  Před 2 lety

      Какой?

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

      Наверное тот при котором последний элемент массива оказался сразу на своём месте, под индексом 2. Думаю для наглядности "6" надо было поместить в произвольном месте но не на 3 позиции (индекс 2)@@codaza-channel

  • @ivanlemming5821
    @ivanlemming5821 Před 2 lety

    Вы уверены что у вас график логарифма правильно построен?

    • @codaza-channel
      @codaza-channel  Před 2 lety +1

      Да. Вас что-то смутило?
      Взгляните на эту картинку, возможно в сравнении с другими вариантами картина станет яснее:
      studiousguy.com/wp-content/uploads/2021/06/Complexities-Graph1.png

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

    ох как ускользнуло - вообще ничего не понял! Что он такой сложный то в понимании!

    • @codaza-channel
      @codaza-channel  Před 2 lety

      Попробуйте посмотреть альтернативные источники. Например, на Wikipedia дано достаточно подробное описание: en.m.wikipedia.org/wiki/Quicksort

  • @dm1tttry
    @dm1tttry Před 2 lety

    Приходиться ставить скорость 1.25, ну очень медленно говоришь

    • @codaza-channel
      @codaza-channel  Před 2 lety +1

      😥

    • @dm1tttry
      @dm1tttry Před 2 lety

      @@codaza-channel Извини если расстроил, по контенту все отлично, ты хорош! Наверно, медленная речь стала заметна после твоих Shortов, где ты за 30 секунд излагаешь быстро какую-то тему :)

  • @olegpol1440
    @olegpol1440 Před 2 lety

    Мало что понятно, просто дублируете код словами не объясняя сути алгоритма

    • @codaza-channel
      @codaza-channel  Před 2 lety

      Видимо у меня не получилось раскрыть суть алгоритма для вас. Так или иначе, попробуйте посмотреть альтернативные источники. Я могу предложить вам интересную статью, где алгоритм объясняется достаточно подробно: towardsdatascience.com/an-overview-of-quicksort-algorithm-b9144e314a72
      Надеюсь, статья окажется более информативной, чем мой вариант изложения. Не стесняйтесь задавать вопросы 🙂

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

      @@codaza-channel Спасибо, может вернусь к этому видео позже

  • @bltvg
    @bltvg Před rokem

    Я всё надеялся увидеть реализацию без выделения дополнительной O(n) памяти. Но не увидел. В это вся сложность алгоритма.

  • @Русь-Родина

    Самый быстрый алгоритм упорядочивания массивов разработан мной, только об этом почему-то помалкивают. Я же никто! )) Это только они, вченные, что-то там самое лучшее разрабатывают, а мы типа неспособны и нам не дано. И да, так называемая сортировка пузырьком является частным случаем моего алгоритма сортировки и задействуется в самом конце, когда пару элементов находящихся рядом надо переставить местами. При этом не нужно перебирать весь отсортированный массив, как может показаться знатокам алгоритма сортировки пузырьком. Невозможное возможно. Хоар курит бамбук со своей быстрой сортировкой. Русские способны создавать лучшее. Лишь бы не мешали им создавать эти типа самые умные это лучшее. Свое ценить надо, а не перед иноземным пресмыкаться. На Масковии не самые умные живут. Доказано практикой жизни.

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

      а код можно ?

    • @Русь-Родина
      @Русь-Родина Před rokem

      @@user-ws7ft5ko6y Только за деньги! И так всю жизнь за спасибо проработал и живу как бомж. Разрабатывайте сами, если сможете.

    • @Vyomantu
      @Vyomantu Před rokem

      @@Русь-Родина Тогда грош цена твоему алгоритму, бомжара. ^__^ Хоар рулит!

    • @Русь-Родина
      @Русь-Родина Před rokem

      @@Vyomantu Пусть рулит. Только лучшим он от этого не становится.

  • @Русь-Родина

    Про сортировку таблиц (массивов массивов) ничего не сказано. Эта тема достойна внимания! Не говорите только, что такого алгоритма нет. Хоар в этой сортировке со своей сортировкой точно курит бамбук.))