Сортировка путем объединения алгоритмов сортировки вставками и сортировки слиянием.

Опубликовано: 21 Сентября, 2022

Сортировка вставками: массив фактически разделен на отсортированную и несортированную части. Значения из несортированной части выбираются и помещаются в правильную позицию в отсортированной части.
Преимущества: Ниже приведены преимущества сортировки вставками:

  • Если размер сортируемого списка невелик, сортировка вставками выполняется быстрее.
  • Сортировка вставками занимает время O(N), когда элементы уже отсортированы
  • Это алгоритм на месте O (1), вспомогательное пространство не требуется.

Сортировка слиянием: Сортировка слиянием — это алгоритм «разделяй и властвуй». Он делит входной массив на две половины, вызывает себя для этих двух половин, а затем объединяет две отсортированные половины.

Преимущества: Ниже приведены преимущества сортировки слиянием:

  • Разделение основной проблемы на подзадачи не требует значительных затрат.

Из приведенных выше двух сравнений преимущества обоих алгоритмов сортировки могут быть объединены, и результирующий алгоритм будет иметь временную сложность O(N[K+log(N/K)]). Ниже приведен вывод временной сложности этого комбинированного алгоритма:
Пусть, нет. элементов в списке = N
Разделить :

  • Сначала мы разделим эти N элементов на (N/K) групп размера K

Сортировка :

  • Для каждого подразделения подмассива размера K выполните операцию сортировки вставками, чтобы отсортировать этот подмассив.
  • Общая стоимость сортировки вставками для одного блока из K элементов:
    • В лучшем случае: O(K)
    • В худшем случае: О(
  • Поскольку существует (N/K) таких блоков размера K, мы получаем общую стоимость применения сортировки вставками как:
    • В лучшем случае: (N/K) * K = O(N) <– (1)
    • Для наихудшего случая: (N/K) * K^{2} = O(NK) <– (2)

Слияние :

  • После применения сортировки вставками по (N/K) группирует каждый из K отсортированных элементов
  • Для слияния этих (N/K) групп:

  • Допустим, мы делаем i итераций сортировки слиянием. Итак, чтобы цикл остановился, нам нужно приравнять как:
  • (2 ^ я) * К = Н
  • (2 ^ я) = Н/К
  • i*log(2) = log(N/K) Берем журнал с обеих сторон
  • я = журнал (Н/К)
  • Стоимость слияния = O(N)
  • Общая стоимость слияния = количество итераций * стоимость итерации
    • = лог(Н/К)*Н
    • = Н*лог(Н/К)
    • = O(N*Log(N/K)) <– (3)

Общая стоимость алгоритма (вставка + слияние) составляет:

  • В лучшем случае: N+Nlog(N/K) <– из (1) и (3)
  • Наихудший случай: NK + Nlog(N/K) <– из (2) и (3)

Если K = 1, то это полная сортировка слиянием, которая лучше с точки зрения временной сложности.
Если K = N, то это полная сортировка вставками, которая лучше с точки зрения пространственной сложности.