Сортировка слиянием в python. Merge sort in Python. Recursive sorting algorithms

Поделиться
HTML-код
  • Опубликовано: 3 фев 2025

Комментарии • 45

  • @ITHobbies
    @ITHobbies 4 года назад +14

    Как всегда качество и подача на высоте. Спасибо!

  • @rub.p
    @rub.p 2 года назад +2

    Спасибо большое за это видео. Кратко и ясно. Поймет даже самый далекий

  • @АленаМищенко-в1т
    @АленаМищенко-в1т 2 года назад +2

    Большое спасибо! Занимаюсь на курсе ООП,на stepik.
    Алгоритмы сортировки вдруг понадобились - и тут снова ваша помощь🙂

  • @masiania_do_mi_sol6
    @masiania_do_mi_sol6 2 года назад +6

    Просто лучший. За 10 минут научилась большему, чем за 4 года универа. Спасибо

  • @dimitrilarios2667
    @dimitrilarios2667 4 года назад +3

    Отличный преподаватель. Алгоритмы - в плейлист.

  • @ВалерияМалышева-ь1в
    @ВалерияМалышева-ь1в 3 года назад +5

    Все очень подробно объяснено!👍🏻Пойду пробовать на задачах😊

  • @arxxximed
    @arxxximed 4 года назад +3

    Хороший подробный разбор.

  • @Александр-л8з3э
    @Александр-л8з3э 3 года назад +18

    В коде на видео ошибка. Вот работающий код:
    def merge(a,b):
    c=[]
    i=j=0
    while i

    • @СултанЖусупов-б5т
      @СултанЖусупов-б5т Год назад +1

      можете обьяснить пж в чем именно заключается ошибка

    • @abramovdenis09
      @abramovdenis09 Год назад +4

      @@СултанЖусупов-б5т В случае когда входной массив имеет нечетную длину, возникает ситуация когда в функцию merge_two_list, приходят массивы разной длины к примеру a = [5], b = [7,9] в этом случает в цикле отработает условие a[i] < b[j] для [5], затем после цикла сработает условие if j < len(b), НО только для [7], из-за чего в результате потеряется 9. Для этого необходимо перебирать все элементы в массиве не прошедшем проверку внутри while - для этого вводятся еще два цикла while i < len(a) вместо if i < len(a) и while j < len(b) вместо if j < len(b).

    • @Игорь-к9с6к
      @Игорь-к9с6к Год назад

      можете объяснить как этот код сработал у него? я написал тот же код с теми же данными и получил ошибку

    • @abramovdenis09
      @abramovdenis09 Год назад

      @@Игорь-к9с6к У меня код из видео не работает, его пришлось доработать

    • @Игорь-к9с6к
      @Игорь-к9с6к Год назад

      ​@@abramovdenis09 у меня вопрос как он сработал в видео? я запускал его с теми же данными и полностью его повторил и проверил точность повтора, но код не работает. машина ведь не может ошибаться - автор видео получается делал монтаж? других вариантов я не могу придумать

  • @АлександрПанкратов-к5б

    Есть ли в планах делать видео по Django?

  • @doloidiktatorov
    @doloidiktatorov 4 года назад +5

    Отличное видео. Спасибо.

  • @ZidanUZB
    @ZidanUZB 3 года назад +11

    сделал как на видео но на степике не проходит решение: """Traceback (most recent call last):
    File "jailed_code", line 53, in
    assert merge_sort([11, 15, 19, 20, 20, 6, 4, 16, 8]) == [4, 6, 8, 11, 15, 16, 19, 20, 20], "Функция merge_sort возвращает неправильный результат"
    AssertionError: Функция merge_sort возвращает неправильный результат"""

    • @Sumrock
      @Sumrock 2 года назад

      Скорее всего не актуально, но ты, видимо, забыл 'left' и 'right' обернуть в рекурсию:
      left = merge_sort( lst[middle : ] )
      right = merge_sort( lst[ : middle] )

  • @ShStepan
    @ShStepan 3 года назад

    Разве не while i < n or j < m?

  • @antonkulish6601
    @antonkulish6601 Год назад +1

    отличный ролик, спасибо. Только не b 'йотый', a b 'житый'

  • @userr19194
    @userr19194 3 года назад +2

    Спасибо за видео! Но это самая непонятная тема из трех плейлистов: основы, ооп, алгоритмы и структуры данных

  • @MAPMEJIADbI4
    @MAPMEJIADbI4 3 года назад +4

    4:00 А куда делать пятёрка?)

  • @ЕрвандАгаджанян-в3к
    @ЕрвандАгаджанян-в3к 4 года назад +1

    Очень крутое видео!

  • @vadiful
    @vadiful 4 месяца назад

    У меня все работает. Если у кого-то не работает, проверьте свой код, скорее всего какой-то символ пропущен или написан с ошибкой...

  • @ShortRush0
    @ShortRush0 2 года назад +1

    вау, прочитал около 3 статей, ничего не понял. Ваше видео шедевр, вялiкi дзякуй)

  • @19gan91
    @19gan91 2 года назад +7

    Со слиянием списков все понятно, но как списки отсортировались в процессе разбиения рекурсией вообще не могу понять. Кто-нибудь может скинуть ссылку где это можно прочитать?

    • @ppaseeker
      @ppaseeker 2 года назад

      ты слияешь 2 элемента! они в этот момент и сортируются, а далее у тебя 2 списка каждый из 2 отсортированых и т.д. в итоге все соединились и отсортировались

  • @jamjam3337
    @jamjam3337 2 года назад

    спасибо!

  • @Antinormanisto
    @Antinormanisto 11 месяцев назад +1

    Вот иногда думаю, как до этого можно было догадаться самому?

  • @sergeyevgenievich310
    @sergeyevgenievich310 Год назад

    Снова не могу понять, почему бы не решить merge_two_list() через popы А[0] и В[0], с добавлением в С?

  • @Vladimir-re8xl
    @Vladimir-re8xl 4 года назад +4

    Django

  • @ARLIAMANJHO
    @ARLIAMANJHO Год назад +1

    Не понял. В какой момент происходит сортировка списка? Если например в левой части списка идут числа 3, 1,...то как в списке они окажутся в правильной последовательности?

    • @sergeyevgenievich310
      @sergeyevgenievich310 Год назад

      в merge_two_list, когда в списках остаются по одному элементу, они сравниваются и упорядоченно сливаются в новый список С.

  • @бесполезный-м1б
    @бесполезный-м1б Год назад

    если его можно отсортировать слиянием, то можно просто соединить срез l[0] и l[1:]

  • @jackmetropolitan7845
    @jackmetropolitan7845 3 года назад

    ТОП Контент!

  • @ТатьянаОгнивенко-ж9ф

    Спасибо!!!

  • @Original9698
    @Original9698 Год назад

    Решил задачу, но лишь немного изменил входные данные в функцию, в pycharme всё норм получается, но на степике не принимает решение, не понимаю в чем проблема
    # функция merge_two_list должна объединить два списка
    def merge_two_list(a, b):
    c=a+b
    r=[]
    while len(c)!=0:
    r.append(min(c))
    c.remove(min(c))
    return r
    # функция merge_sort должна выполнить сортировку
    def merge_sort(s,N):
    if len(s)==1:
    return s
    else:
    a = merge_sort(s[:(N//2)],N//2)
    b = merge_sort(s[(N//2):],N-N//2)
    return merge_two_list(a, b)
    N = int(input())
    s = list(map(int,input().split()))
    print(merge_sort(s,N))

  • @Razor102rus
    @Razor102rus 3 года назад +3

    а теперь напишите это на Си)

  • @CHESCHIR
    @CHESCHIR 11 месяцев назад +1

    для чего нужна переменная n? n = int(input()) ни где не участвует

  • @ВадимК-ы1о
    @ВадимК-ы1о 4 года назад

    А если брать минимум и список перезаписывать с исключением его

  • @Chernikru
    @Chernikru Год назад

    наитупейшая задача

  • @say1dead179
    @say1dead179 2 года назад

    У меня почему то выводит 1 1 3 4 5 ( массив 5 4 3 2 1). Почему?

  • @itzvortex3172
    @itzvortex3172 2 года назад

    Для питонистов указатели лишь вспомогательный инструмент в некоторых алгоритмах, а вот для c++ программистов...