Курс 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. Генератор бросков кубиков
  4. Переопределение оператора % для объектов
  5. Создание списка через итерацию
  6. Определение объема памяти объекта
  7. Работа с контекстными переменными
  8. Удаление ключей из словаря
  9. Новшества Flask 2.0
  10. Работа с комбинациями в Python.
  11. Работа со строками в Python
  12. Операции с датами в Python
  13. Переворот последовательности
  14. Форматирование заголовков в Python
  15. Показ всплывающих окон Tkinter
  16. Подсчет частотности элементов в Python
  17. Метод __int__ в Python
  18. Оптимизация памяти с __slots__
  19. Оператор space-invader
  20. Работа с эмодзи в Python
  21. Преобразование типов данных в set comprehension
  22. Преобразование строк в числа с плавающей запятой
  23. Проверка наличия элемента в списке
  24. Создание генераторов
  25. Поиск частого элемента
  26. Нахождение максимального значения и его индекса в списке
  27. Обновление данных через PUT запрос
  28. Округление банкира в Python
  29. Удаление дубликатов из списка
  30. Настройка вывода в Numpy
  31. Конвертация изображений в PDF
  32. Операции с комплексными числами
  33. Виртуальное окружение Python
  34. Работа со строками
  35. Переопределение метода __floordiv__
  36. Конкатенация списков в Python
  37. Управление асинхронными задачами на Python.
  38. Python: отличительная особенность — отступы
  39. Оператор in для Python
  40. Управление браузером с Selenium
  41. Проверка типа объекта в Python
  42. Обход дочерних элементов BeautifulSoup
  43. Использование обратной косой черты в f-строках
  44. Хешируемые ключи в Python
  45. Обработка исключений с блоком else
  46. Создание тестовых данных с Faker
  47. Закрытие файла в Python

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