Курс 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. Тестирование функции сложения
  2. Переименование файлов в Python
  3. Переменные в Python
  4. Импорт в Python: список all
  5. Принципы программирования
  6. Логические значения в Python
  7. Импортирование в Python
  8. Операции с числами в Python
  9. Очистка вывода в Python
  10. Основные операции с Numpy
  11. Измерение времени выполнения кода
  12. Декоратор для группы пользователей в Django
  13. Метод remove() для удаления элемента из списка
  14. Работа с буфером обмена на Python
  15. Преобразование в float
  16. Парсинг статей с Newspaper3k
  17. Создание коллекций из генератора
  18. Howdoi — получение ответов из терминала
  19. Улучшение читаемости кода в Python
  20. Пространство имен в Python
  21. Создание пользовательской коллекции в Python
  22. Уникальность ключей в словаре
  23. Просмотр файла в Jupyter Noteboo
  24. Работа с датой и временем в Python
  25. Обезопасьте ввод данных
  26. Функция zip() в Python
  27. Метод rrshift для пользовательских объектов
  28. Изменение логики работы с временем
  29. Модуль future Python
  30. Numpy: разбиение массивов
  31. Декоратор проверки активности
  32. Оператор walrus в Python
  33. Оформление кода по PEP 8
  34. Аргументы *args и **kwargs
  35. Ввод нескольких значений
  36. Метод __call__ в Python
  37. Генерация QR-кодов с библиотекой qrcode
  38. Избегайте ошибку FileNotFoundError
  39. Python 3.12: Псевдонимы типов
  40. Сложение матриц в NumPy
  41. Роль запятой в Python
  42. GitHub в Telegram: подписка на уведомления
  43. Мониторинг работы программы Py-spy
  44. Создание пустых функций и классов в Python
  45. Удаление элемента из списка

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