#9. Сортировка вставками | Алгоритмы на Python

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

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

  • @ВикторияТрутько-ж2ъ
    @ВикторияТрутько-ж2ъ 2 года назад +29

    Сергей, спасибо вам огромное за ваш труд ! Человечество держится на таких людях как вы, которые безвозмездно помогают другим, ваш вклад в обучение неоценим!)

  • @nazarkhort4362
    @nazarkhort4362 3 года назад +24

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

  • @Макс-ц9х4ч
    @Макс-ц9х4ч 2 года назад +28

    Пересмотрел несколько раз, и все равно мне кажется что это не сортировка вставками а модифицированный "пузырёк" с реверсом во вложенном цикле, так как вы сравниваете элементы j и j -1 .
    По идее при сортировке вставками сравниваем i-й элемент и продвигаемся с проверкой условия к 0 элементу, если условие срабатывает то забираем элемент с позиции i и вставляем на позицию j на которой сработало условие, при этом если ранее сортированные элементы просто сдвигаются.
    Именно сортировка вставками в моём понимании ( в питоновском стиле) может выглядеть так:
    for i in range(1, len( list )):
    for j in range(i - 1, -1, -1):
    if list[ i ] < list[ j ]:
    continue
    else:
    j += 1
    break
    if list[ j ] > list[ i ]:
    list.insert(j, list.pop(i))
    поправьте, если я ошибся

    • @ladogaspirit9953
      @ladogaspirit9953 2 года назад +4

      тоже так подумалось при просмотре

    • @usernoname-wv6of
      @usernoname-wv6of Год назад

      Можно без инсерта сделать вполне.
      for i in range(1, len(array)):
      key = array[i]
      j = i - 1
      while j >= 0 and key < array[j]:
      array[j + 1] = array[j]
      j -= 1
      print(array) - Этот принт покажет что происходит со списком. По факту элемент, который будет вставлен на свое место хранится в key. В это время проходимся по списку и сдвигаем каждый элемент, который больше key вправо на +1 (если вставлять так n элементов, то на +n)
      array[j + 1] = key

  • @dariajakuszewicz8081
    @dariajakuszewicz8081 2 месяца назад +1

    спасибо! помогло при прохождении курса на степике

  • @timur8216
    @timur8216 3 года назад +10

    Огромное спасибо Вам!
    Максимально понятно объясняете, ждем продолжение по алгоритмам!)

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

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

  • @СергейКондулуков-з9ч

    Очень хорошее объяснение алгоритма. Сергею большое спасибо.

  • @WadeChannal
    @WadeChannal 2 года назад +2

    Самое понятное объяснение из всех что я видел

  • @nikitun85
    @nikitun85 Год назад +5

    Все очень круто! Безусловно лайк. Но было бы неплохо хотя бы в двух словах акцентировать внимание на разнице с уже объясненными подходами. Когда разбираешься в этом первый раз, это не всегда очевидно. Первая моя мысль после этого видео была о том, что методы суть одно и то же, только идут по массиву в разных направлениях. Один из начала в конец, другой из конца в начало.

  • @mma_lina
    @mma_lina 10 месяцев назад +5

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

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

    У меня через 3,5 часа экзамен начнётся, на котором будет билет с вопросом по методам сортировок.
    Спасибо Вам большое за видео

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

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

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

    Большое спасибо за популярное объяснение!

  • @ЕгорМиронов-щ3п
    @ЕгорМиронов-щ3п 3 года назад +1

    Спасибо за визуальное объяснение.

  • @СергейАтьков
    @СергейАтьков Год назад +1

    Отличное объяснение!) Спасибо огромное)

  • @antonivanov7687
    @antonivanov7687 2 года назад +2

    Спасибо, это лучше объяснение

  • @МихаилПеров-у1ю
    @МихаилПеров-у1ю 2 года назад +1

    Сергей, вам следует заняться преподаванием. Огромное спасибо.

  • @АндрейСергеев-б7я8р
    @АндрейСергеев-б7я8р 2 месяца назад +2

    А не надо в конце к N добавлять +1, потому что range последний элемент не включает?

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

    Топ объяснение! Спасибо!

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

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

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

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

  • @musecollaboration
    @musecollaboration 10 месяцев назад +1

    можно же вместо break использовать continue?
    l = [10, 7, 8, 3, 8, -2]
    n = len(l)
    for run in range(1, n):
    for i in range(run, 0, -1):
    if l[i] < l[i - 1]:
    l[i], l[i - 1] = l[i - 1], l[i]
    continue
    print(l)

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

    За видео и труды однозначно лайк! Мне вот не совсем понятно, зачем блок else? Ведь если if дает False, то и так перейдем не следующую итерацию цилка с j.

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

    спасибо

  • @ВладСкопен
    @ВладСкопен 6 месяцев назад +1

    Вітаю, контент супер , але було б крутіше , щоб назви змін відповідали їх суті бо j та i заплутує навіть в такому простому на перший погляд алгоритмі

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

    👏👍

  • @Марина-з4у6д
    @Марина-з4у6д 2 года назад +1

    спасибо!

  • @k-065olga8
    @k-065olga8 3 года назад +4

    Доброе время суток! Есть еще такой алгоритм сортировки вставками
    a = [5, 2, 4, 6, 1, 3]
    for i in range(1, len(a)):
    temp = a[i]
    j = i - 1
    while (j >= 0 and temp < a[j]):
    a[j + 1] = a[j]
    j = j - 1
    a[j + 1] = temp
    print(*a)
    он ведь сложнее, но почему то именно он описан в книге. Можете объяснить зачем так усложняют некоторые авторы?

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

      Наверное эти авторы ранее программировали на С++, Fortran или каком другом подобном языке и формально также продолжают писать и на Python. Сам грешил вначале ))

    • @k-065olga8
      @k-065olga8 3 года назад +1

      @@selfedu_rus Спасибо большое за объяснение!!! и за Ваши уроки , в книгах очень мудрят !!!

    • @k-065olga8
      @k-065olga8 3 года назад +5

      А еще, смешно получилось. Я нашла Ваши уроки потому, что учусь на платных курсах и нам преподаватель объяснял полтора часа алгоритм КМТ и никто ничего не понял, вот и полезла погуглить)))

    • @Maxim8897
      @Maxim8897 4 дня назад

      В питоне есть возможность множественного присваивания, поэтому нет с смысла в использовании переменной key. Посмотрите ещё начальную лекцию Тимофея Хирьянова

  • @МаксГапонов-ы4е
    @МаксГапонов-ы4е 2 года назад +4

    А обезательно else: break писать? Если да, то почему?

    • @Георгий-ы7ц4к
      @Георгий-ы7ц4к 2 года назад +3

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

  • @sigurds5599
    @sigurds5599 4 месяца назад +1

    Спасибо большое))))

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

    Вроде всё понятно, начинаю сам повторять не понимаю((( не как в голове не могу представать как это прорабатывается.

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

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

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

    Имеется массив целых чисел a[1],...,a[n], принимающих значения {0,1,....,m}.Сортировать этот массив по возрастанию , используя количество действий порядка (m + n). Указание: Посчитать сколько раз каждое из чисел {0,1,....,m} встречается в массиве.
    Кто знает подскажите какой алгоритм сортировки тут применять ?

  • @АлишерБат
    @АлишерБат 3 года назад +1

    Как сделать такой же код на C# ?

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

    здраствуйте а как сделать сортировку ставками но наоборот от большого к меньшему

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

      при слиянии списков формируете последовательности от большего к меньшему и все

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

    Это разве не пузырьковый метод? Я про код

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

    объясните пожалуйста for j in range(i, 0, -1)

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

      см. курс по Python на этом канале

    • @SLSRPPRO
      @SLSRPPRO 3 года назад +1

      @@selfedu_rus затупил , -1 это же шаг))

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

    Зачем это изучается если есть встроенные функции сортировки? На работе не оценят если вместо встроенной функции потратить время на такую реализацию.

    • @selfedu_rus
      @selfedu_rus  2 года назад +9

      А кто все это изначально реализовывает? Бог? И что если нужно немного изменить алгоритм или развить?

  • @tbma137
    @tbma137 7 месяцев назад

    пузырьковая реверс xd

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

    Это метод пузырька, а не вставка....

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

    Я не совсем понимаю, различия между пузырьком и вставкой, если значение (большее или меньшее передвигается на один, как при пузырьке. Там такое сравнение с соседом, и такое перемещение. Позиция поиска разве что другая. Так почему тогда вставку нельзя назвать пузырьком?

    • @ЕгорМиронов-щ3п
      @ЕгорМиронов-щ3п 3 года назад +3

      Потому что:
      1. Пузырьки уже есть и тот алгоритм более логичен по названию. А называть можете как хотите - частичный пузырек.))
      2. Сложность этого алгоритм по лучшему его времени = n (если алгоритм уже отсортирован на входе, то алгоритм по нему пройдет один раз). В то время, как у пузырька всегда n^2.

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

      @@ЕгорМиронов-щ3ппройдет еще раз если использовали break. Если не использовать break то это обратный пузырек

  • @ЖуравльовВіталій
    @ЖуравльовВіталій 3 года назад +3

    Дизлайк сюда:
    👍