Java. Сортировка слиянием.

แชร์
ฝัง
  • เผยแพร่เมื่อ 12 ก.ย. 2024
  • В данном видео приведен детальный разбор алгоритма сортировки слиянием, а так же рассматривается вариант реализации этого алгоритма на языке программирования Java. Кроме этого проводится сравнение эффективности работы сортировки слиянием и быстрой сортировки.
    Исходный код:
    github.com/Arh...
    Поддержать канал💰:
    yoomoney.ru/to...
    #ArhiTutorialsJava #ityoutubersru

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

  • @Qwerty-fn3rf
    @Qwerty-fn3rf 9 หลายเดือนก่อน +6

    под эту музыку, когда сказал, что остается один элемент 36, которому не нашлось пары, я чуть слезу не пустил)

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

    нифига себе просто , мне на неделю этого видео наверное хватит щас сидеть разбираться :)
    это лучшее видео о merge() что я смог найти !!!

  • @Babuta87
    @Babuta87 4 ปีที่แล้ว +7

    После восьми просмотров ЗАШЛО!!! Спасибо тебе, добрый человек!)

  • @boltusain8759
    @boltusain8759 3 ปีที่แล้ว +4

    Отличное видео, доходчивая подача, складная речь.

  • @yuryconnect4785
    @yuryconnect4785 6 หลายเดือนก่อน

    Отличный материал. Спасибо огромное !
    Я бы добавил в аннотации @cpu, @ram, чтобы сразу были видны сложности алгоритма, по памяти и по скорости работы.
    Еще раз Спасибо!

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

    Большое вам спасибо! Очень хорошо все объяснили и детально показали. Отдельное спасибо за код на гитхабе.

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

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

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

    Спасибо вам, человечище!

  • @manguzt
    @manguzt 3 ปีที่แล้ว +2

    Измеритель времени понравился, спасибо

  • @johannesbrown8853
    @johannesbrown8853 5 ปีที่แล้ว +3

    Спасибо большое! Очень круто! 👍

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

    Отличные видео,спасибо вам!

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

    Большое спасбио за полезный и понятный урок!

  • @MuratFatykhov
    @MuratFatykhov 9 หลายเดือนก่อน

    Очень доходчивое объяснение. Спасибо, автору!
    Но глядя на сам алгоритм, невольно назревает вопрос, много ли вообще людей, которые могут удержать в голове все те индексы, которые постоянно скачут в этой реализации?
    Сидел, тыкался в дебаггер. Пытался понять и запомнить все связи, но это очень тяжело. Общая идея то ясна, но когда доходит до реализации с кучей индексов и циклов по динамически изменяющимся массивам, мозг ломается.
    Теперь думаю, может есть какие-то другие реализации сего алгоритма. Где все не настолько запутано

    • @MuratFatykhov
      @MuratFatykhov 9 หลายเดือนก่อน

      Сделал методом рекурсии. Код стал в разы читаемее и яснее. Однако скорость работы сортировки слиянием при рекурсивной реализации стала примерно в 3-4 раза медленнее (!) при работе с массивом из 100 тысяч случайных целых чисел со значениями от -500_000 до +500_000 по сравнению с реализацией из этого урока. Так придется выбирать между производительностью и читаемостью кода))

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

    лайк за музон из диско элизиум

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

    Спасибо, очень познавательно!!!

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

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

  • @ПавлоПономаренко-у7д
    @ПавлоПономаренко-у7д 4 ปีที่แล้ว +1

    Спасибо за нормальное объяснение !

  • @funnymoment9164
    @funnymoment9164 4 ปีที่แล้ว

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

  • @artem8875
    @artem8875 4 ปีที่แล้ว

    спасибо большое за видео) очень подробно объясняется. Какая будет асимптотика у этой реализации( по On и ram(память)) спасибо

  • @dusheslov2700
    @dusheslov2700 5 ปีที่แล้ว +3

    Даровенько Серый, не плохо объясняешь, но есть недостатки, вот бы ты хоть мельком показал весь код включая входные данные, вот для новичков и это проблема, в нэте проблема эту сортировку найти целиком в рабочем состоянии!) Ну и на будущее показывай пожалуйста весь код хоть мельком.

    • @arhitutorials
      @arhitutorials  5 ปีที่แล้ว +3

      Хорошо. Думаю, не выложить ли мне код всех алгоритмов на гитхаб. Это будет по удобнее чем с видео переписывать)

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

      @@arhitutorials Сергей выложи хоть куда нибудь плиз, второй день бьюсь, без вариантов, я уже 4 месяца изучаю java, полиндром написал и много ещё чего, надо сорт. слиянием выучить. Только на git подпиши их на будущее. Если выложишь дай знать пожалуйста.

    • @arhitutorials
      @arhitutorials  5 ปีที่แล้ว

      @@dusheslov2700 , постараюсь завтра-послезавтра выложить код, как будет готово, напишу ссылку.

    • @dusheslov2700
      @dusheslov2700 5 ปีที่แล้ว

      @@arhitutorials Буду благодарен.

    • @arhitutorials
      @arhitutorials  5 ปีที่แล้ว +4

      @@dusheslov2700 , выложил исходный код
      github.com/Arhiser/java_tutorials/blob/master/src/ru/arhiser/sort/MergeSort.java
      Добавил ссылку в описание к видео.

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

    А можно сделать разбор обхода дерева ходов в игре с ненулевой конечной суммой и альфа-бета отсечением? Типа как в шахматных программах делают, но на более простом примере, например, крестики-нолики или что-нибудь сравнимое по простоте. Пытался постичь альфа-бета отсечение, но про него во всех источниках или так муторно, что невозможно понять, или очень поверхностно, типа, и так всё само собой очевидно и пояснений не требует. Вот такой же понятно разобранный практический пример по этой теме был бы очень кстати.

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

    Спасибо

  • @ЕвгенийЛебедев-в5ы
    @ЕвгенийЛебедев-в5ы 3 ปีที่แล้ว +2

    Сергей, здравствуйте! Объясните, пожалуйста, почему при исходном массиве размером в 11 элементов, алгоритм сортирует некорректно?

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

      Здравствуйте! Дайте тестовый пример на котором сортировка работает некорректно.

    • @ЕвгенийЛебедев-в5ы
      @ЕвгенийЛебедев-в5ы 3 ปีที่แล้ว +1

      @@arhitutorials {15,78,89,9,12,12546,8,879,16,54,1}

    • @arhitutorials
      @arhitutorials  3 ปีที่แล้ว +2

      @@ЕвгенийЛебедев-в5ы Исправил
      github.com/Arhiser/java_tutorials/commit/565928296825898c738a3d4146b1afb48acae272
      Моя ошибка. Не было обработки для случая, когда не с чем сливать остаток массива.

    • @ЕвгенийЛебедев-в5ы
      @ЕвгенийЛебедев-в5ы 3 ปีที่แล้ว +1

      @@arhitutorials спасибо большое за материал!

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

      @@arhitutorials насчет этого исправления, есть сомнения в правильности кода.
      Я думаю, раз уж метод merge() имеет аргумент "destStart", полагаю, он рассчитан на работу, когда слияние двух массивов в третий ("dest") производится с индекса "destStart".
      Т.к. "destStart" может отличаться от "src1Start", итерироваться в цикле for с помощью "i" можно только по одному из массивов. Для другого придется использовать другой итератор ("index1"). При этом следует корректно определить условие цикла.
      if (src1Start + size > src1.length) {
      for (int i = d_start; i < Math.min(desk.length, left.length); i++) {
      desk[i] = left[index1++];
      }
      return;
      }

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

    топ

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

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

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

    это рекурсивная сортировка слиянием???

  • @John.Constantine.777
    @John.Constantine.777 4 หลายเดือนก่อน

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

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

    Прикольно массив из 13 элементов становится массивом из 12 элементов... Это так зачем не понимаю?..

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

    Решение перегружено лишними параметрами и переменными. Плюс, грех рассказывать про сортировку слиянием и не уделить времени рекурсивной реализации... Которая, кстати, займет меньше 30 строк кода. Тем не менее, условие внутри цикла слияния у метода merge понравилось.

  • @zvoni03
    @zvoni03 4 ปีที่แล้ว

    увы но этот алгоритм не правильно отработает если второй массив будет больше первого

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

      Протестировал на массивах разных длин, неправильную работу получить не удалось. Если вам не сложно, напишите пожалуйста тестовый пример, на котором алгоритм неправильно работает. Если есть ошибка, ее надо исправить.

    • @zvoni03
      @zvoni03 4 ปีที่แล้ว

      @@arhitutorials
      print(intext1)
      print(intext2)
      res = c = [c * '' for c in range(len(intext1)+len(intext2))]
      #res=[]
      index_intext1=0
      index_intext2=0
      for i in range(len(intext1)+len(intext2)):
      if ((index_intext1=len(intext2)) or (intext1[index_intext1] < intext2[index_intext2])):
      res[i]=intext1[index_intext1]
      #res.append(intext1[index_intext1])
      index_intext1=index_intext1+1
      else:
      #res.append(intext2[index_intext2])
      res[i] = intext2[index_intext2]
      index_intext2 = index_intext2 + 1
      print(res)
      ['1', '4', '9']
      ['1', '8', '27', '88']
      ['1', '1', '4', '8', '27', '88', '9']

    • @zvoni03
      @zvoni03 4 ปีที่แล้ว

      @@arhitutorials на яве всё работает, значит у меня ошибки

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

    15.10.2022

  • @John.Constantine.777
    @John.Constantine.777 4 หลายเดือนก่อน

    а куда делось второе число 42? )))