Курс Python → Сортировка слиянием

Алгоритм сортировки слиянием является одним из наиболее эффективных методов сортировки массивов. Он основан на стратегии «разделяй и властвуй», которая заключается в разделении исходного массива на две равные части, сортировке каждой из них отдельно, а затем объединении отсортированных подмассивов в один отсортированный массив. Этот подход позволяет эффективно сортировать массивы любого размера.

Для реализации алгоритма сортировки слиянием на Python можно написать функцию, которая будет рекурсивно разделять и сортировать массив. Начнем с базового случая — когда массив содержит только один элемент, в этом случае он уже отсортирован. Затем рекурсивно делим массив пополам, пока не дойдем до базового случая, после чего начинаем объединять и сортировать подмассивы.


def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    
    mid = len(arr) // 2
    left = merge_sort(arr[:mid])
    right = merge_sort(arr[mid:])
    
    return merge(left, right)

def merge(left, right):
    result = []
    i = j = 0
    
    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    
    result.extend(left[i:])
    result.extend(right[j:])
    
    return result

arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_arr = merge_sort(arr)
print(sorted_arr)

В данном примере функция merge_sort рекурсивно разделяет и сортирует массив arr, а функция merge объединяет и сортирует два отсортированных подмассива. После вызова merge_sort для исходного массива, мы получаем отсортированный массив sorted_arr, который затем можно использовать в дальнейшем коде.

Алгоритм сортировки слиянием имеет сложность O(n log n), что делает его одним из наиболее эффективных методов сортировки. Он также устойчив, что означает, что порядок элементов с одинаковыми значениями не меняется после сортировки. Этот алгоритм широко используется в практике программирования и может быть полезен при работе с большими массивами данных.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Копирование объектов в Python
  2. Атрибуты класса и экземпляра
  3. Структура данных deque в Python
  4. Замер времени выполнения кода
  5. Основы работы со списками
  6. Метод join() для объединения элементов в строку.
  7. Блок else в циклах.
  8. Docstring в Python
  9. Удаление дубликатов из списка
  10. Метод rlshift для битового сдвига
  11. Подсчет элементов в Python
  12. Удаление символа из строки
  13. Транспонирование 2D-массива с помощью zip
  14. Итераторы в Python
  15. Преобразование данных в Python
  16. Работа с WindowsPath()
  17. Python Ellipsis использование
  18. Объединение списков с использованием itertools.chain
  19. Метод join() для объединения строк
  20. Класс-оболочка для словарей
  21. Склеивание строк через метод join()
  22. Создание генераторов в Python
  23. Уникальные значения из списка
  24. Анонимные функции Lambda
  25. Создание словарей и множеств в Python.
  26. Функции any() и all() в Python
  27. Метод __iand__ для пользовательских классов
  28. Сглаживание списка
  29. Логирование с Logzero
  30. Отладка в командной строке
  31. Методы работы со списками
  32. Операторы увеличения и уменьшения переменной
  33. Измерение времени выполнения кода
  34. Функция с *args.
  35. Хранение данных с помощью dataclasses
  36. Модуль math: константы π и e
  37. Метод enumerate() в Python
  38. Основы работы с базами данных в Python
  39. Метод rrshift для пользовательских объектов
  40. Подсчет элементов в списке с Counter
  41. Python и Юникод: работа с цифрами
  42. Пропуск начальных строк с помощью dropwhile()
  43. Списковое включение в Python
  44. Установка Home Assistant
  45. Печать в одной строке
  46. Операторы объединения в Python 3.9
  47. Удаление файлов с shutil.os.remove()

Marketello читают маркетологи из крутых компаний