Основы понимания и реализации сортировки слиянием
Алгоритмы сортировки — отличный способ погрузиться в мир структур данных и алгоритмов. Сортировка слиянием была первой, которую я изучил и которая заставила меня осознать, что методы, которые мы выбираем как разработчики для развертывания в наших программах, могут в огромной степени определять производительность нашего кода.
Интуиция
Я разобью процесс на два этапа:
- раздел
- стежок
да, это так просто. Вроде.
Раздел
рекурсивно разделите массив из середины на 2 массива, пока вы больше не сможете разделять.
Сшить (или объединить)
Итак, теперь у нас много сломанных деталей. Начинаем сшивать их обратно. Мы меняем раздел, но с изюминкой. Мы устанавливаем счетчик для двух массивов, которые мы сшиваем, и помещаем меньший элемент в массив. Таким образом, наша сшивка будет представлять собой слияние двух разделов, но отсортированное, следовательно, сортировка слиянием.
Представление
Время выполнения: O(n⋅log(n))
разделив массивы пополам и спускаясь вниз, мы спустимся вниз по log(n), чтобы достичь массива размера 1. На каждом уровне мы будем объединять n элементов независимо от количества разделов. с n разделами мы делаем слияния n/2 раз, которые становятся размером 2 ( n/2 * 2 = n), и на последнем шаге мы объединяемся один раз, но получаем размер n (2 * n/2 = n)
Пробел: O(n)
Выполнение
Теперь давайте реализуем это на C++.
Сделайте шаг вперед
мы рассмотрели реализацию сортировки слиянием для массива чисел. Однако сортировку слиянием можно реализовать для любой коллекции, которую можно сравнить. Группа слов, например, может быть упорядочена в алфавитном порядке. Или даже структуру со своим методом сравнения.
- Мы можем реализовать код, который берет сопоставимый массив любого типа и объединяет его с помощью сортировки слиянием.
Дополнительные ресурсы:
если вам понравилась эта статья, не стесняйтесь поделиться. Если у вас есть какие-либо отзывы или вопросы, напишите мне по адресу [email protected].