Курс 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
  5. Замена текста с помощью sub
  6. Сокращение ссылок с pyshorteners
  7. Лямбда-функции в Python
  8. Метод rlshift для битового сдвига
  9. Названия переменных
  10. Карта бомбоубежищ в Москве и Питере
  11. Логирование с Logzero
  12. Подсчет элементов с помощью Counter из collections
  13. Методы и функции в Python
  14. Форматирование строк в Python
  15. Работа с YAML в Python
  16. Python Метод sleep() из time
  17. JSON в Python: модуль, dump, dumps, load
  18. Работа с NumPy.linalg
  19. F-строки в Python
  20. Оператор del в Python
  21. F-строки в Python 3.8
  22. Функция product() в Python
  23. Документация функции help() в Python
  24. Создание новых списков
  25. Создание списка через итерацию
  26. Копирование объектов в Python
  27. Проверка запуска скрипта или импорта модуля
  28. Подробная информация о %pinfo
  29. Создание и инициализация объектов
  30. Автоматизация скриптов на AWS Lightsail.
  31. Избегайте пустого списка
  32. Просмотр атрибутов и методов класса
  33. Работа с GitHub в Telegram
  34. Получение размера объекта с sys.getsizeof()
  35. Вставка переменных в шаблоны Flask
  36. Defaultdict в Python
  37. Анализ кода — Python
  38. Печать списка с помощью метода join
  39. Комментарии в Python
  40. Особенности запятых в Python
  41. Преобразование чисел в восьмеричную строку
  42. Оптимизация памяти в Python
  43. Метод __ilshift__ для битового сдвига влево
  44. Работа с collections в Python.
  45. Наиболее частотные элементы с помощью Counter
  46. Удаление ключа из словаря в Python
  47. Форматирование строк с помощью f-строк

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