Поскольку мы говорили о различных алгоритмах сортировки, сегодня мы изучим алгоритм сортировки выбором. Алгоритм сортировки, который учитывает возможное минимальное количество операций подкачки в среде с ограниченной памятью.
Сортировка выбором — это простой, но эффективный алгоритм сортировки, который работает путем многократного выбора наименьшего (или самого большого) элемента из неотсортированной части списка и перемещения его в начало (или конец) отсортированной части. Этот процесс повторяется до тех пор, пока весь список не будет отсортирован. В этой статье мы углубимся в детали алгоритма сортировки выбором, его реализацию в JavaScript и его применение для решения реальных задач.
Алгоритм сортировки выбором — это алгоритм сортировки сравнением на месте. Он делит входной список на две части:
Алгоритм неоднократно выбирает наименьший элемент из неотсортированной части и заменяет его самым левым несортированным элементом, перемещая границу между отсортированной и неотсортированной частями на один элемент вправо.
Давайте рассмотрим пример с использованием массива [64, 25, 12, 22, 11]:
Теперь массив полностью отсортирован.
Сортировка выбором имеет временную сложность O(n^2) во всех случаях (наилучший, средний и худший), где n — количество элементов в массиве. Это потому что:
Это приводит к примерно (n^2)/2 сравнениям и n заменам, что упрощается до O(n^2).
Из-за квадратичной временной сложности сортировка выбором неэффективна для больших наборов данных. Однако его простота и тот факт, что он выполняет минимально возможное количество свопов, могут сделать его полезным в определенных ситуациях, особенно когда вспомогательная память ограничена.
Сортировка выбором имеет пространственную сложность O(1), поскольку она сортирует массив на месте. Для этого требуется только постоянный объем дополнительной памяти независимо от размера входных данных. Это делает его более эффективным с точки зрения использования памяти, что может быть полезно в средах с ограниченной памятью.
Вот реализация алгоритма сортировки выбором на языке JavaScript:
function selectionSort(arr) { const n = arr.length; for (let i = 0; iДавайте разберем код:
- Мы определяем функцию selectSort, которая принимает на вход массив.
- Мы перебираем массив с помощью внешнего цикла (i), который представляет границу между отсортированной и неотсортированной частями.
- Для каждой итерации мы предполагаем, что первый неотсортированный элемент является минимальным, и сохраняем его индекс.
- Затем мы используем внутренний цикл (j), чтобы найти фактический минимальный элемент в неотсортированной части.
- Если мы находим элемент меньшего размера, мы обновляем minIndex.
- После нахождения минимума при необходимости мы меняем его местами с первым неотсортированным элементом.
- Мы повторяем этот процесс, пока весь массив не будет отсортирован.
Решение проблем с LeetCode
Давайте решим одну задачу по алгоритму лит-кода, используя алгоритм сортировки выбором. А не ___ ли нам?
Задача: сортировка массива [средний]
Задача: Дан массив целых чисел, отсортируйте его по возрастанию и верните его. Вы должны решить задачу без использования каких-либо встроенных функций с временной сложностью O(nlog(n)) и с минимально возможной пространственной сложностью.
Подход:: Чтобы решить эту проблему, мы можем напрямую применить алгоритм сортировки выбором. Это включает в себя перебор массива, поиск наименьшего элемента в неотсортированной части и замену его первым неотсортированным элементом. Мы повторяем этот процесс, пока весь массив не будет отсортирован.
Решение:
// This function sorts an array of integers in ascending order using the Selection Sort algorithm. const sortArray = function (nums) { // Get the length of the input array. const n = nums.length; // Iterate through the array, starting from the first element. for (let i = 0; iЭто решение напрямую применяет алгоритм сортировки выбором, который мы реализовали ранее. Хотя оно правильно решает проблему, стоит отметить, что это решение может превысить ограничение по времени для больших входных данных в LeetCode из-за временной сложности O(n^2) сортировки выбором. На изображении ниже показано, что решение правильное, но неэффективное.
Заключение
В заключение отметим, что сортировка выбором — это простой и интуитивно понятный алгоритм сортировки, который служит отличным введением в мир методов сортировки. Его простота облегчает понимание и реализацию, что делает его ценным инструментом обучения для начинающих. Однако из-за квадратичной временной сложности O(n^2) он неэффективен для больших наборов данных. Для больших наборов данных или приложений, критичных к производительности, предпочтительны более эффективные алгоритмы, такие как QuickSort, MergeSort или встроенные функции сортировки.
Оставайтесь в курсе и на связи
Чтобы вы не пропустили ни одной части этой серии, а также связаться со мной для получения более подробной информации
дискуссии о разработке программного обеспечения (веб, сервер, мобильное устройство или парсинг/автоматизация), данных
структуры и алгоритмы, а также другие интересные технические темы, подписывайтесь на меня:Великое решение ?
Инженер-программист | Технический писатель | Бэкэнд, веб- и мобильный разработчик? | Увлечен созданием эффективных и масштабируемых программных решений. #давайтеподключимся?
Следите за обновлениями и удачи в программировании ???
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3