Курс 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. Перезапуск ячейки в Jupyter Notebook с dostoevsky
  2. Список импортированных модулей в Python
  3. Обезопасьте ввод данных
  4. Генератор надежных паролей
  5. Python enumerate() функции
  6. Модуль xkcd: добавление юмора в Python
  7. Сортировка HTML-элементов
  8. Анонимные функции Lambda
  9. Замена символов в Python
  10. Безопасные SQL-запросы в Python 3.11
  11. Параллельные вычисления в Python
  12. Python: библиотеки и функции
  13. Аннотации типов в Python
  14. Добавление кнопки в tkinter
  15. Использование эмодзи в Python
  16. Обновление и получение данных в SQLite
  17. Python enumerate() использование
  18. Кортеж в Python: создание и использование
  19. Python reversed() vs срез[::-1]
  20. Принципы SRP и OCP
  21. Отрицательные индексы списков
  22. Оператор (*) в Python
  23. Преобразование текста в речь с Python
  24. Сравнение строк в Python
  25. Регистрация на хакатоне
  26. Генерация UUID в Python
  27. Работа с getopt
  28. Сохранение и загрузка модели в PyTorch
  29. Поиск наиболее частого элемента в списке
  30. Закрытие файла в Python
  31. ChainMap.new_child() — добавление нового словаря
  32. Измерение времени выполнения с помощью time
  33. Генераторы данных
  34. Удаление дубликатов из списка
  35. Распаковка элементов последовательности
  36. Фильтрация входных данных в Python
  37. Работа с collections в Python
  38. Python UserString — создание подклассов строк
  39. split() — разделение строки
  40. Регистрация на TenChat
  41. Проверка окончания строки с помощью str.endswith()
  42. Работа с комплексными числами
  43. Удаление дубликатов с сохранением порядка с помощью dict.fromkeys
  44. Обработка ошибок в Python
  45. Автоматизация с Python
  46. Метод __irshift__ для побитового сдвига вправо
  47. Метод __int__ в Python

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