Я закончил университет – в аду нет никакого способа, мне все еще понадобятся структуры данных и алгоритмы, верно? (Это то, что я подумал, я забыл почти все, чтобы сделать больше места в моем мозгу для футбольных викторинов и глупых мемов:)) Пока я не смутился на одном интервью, и из-за этого я провел довольно много времени на обучение этого, Что принесло мне лучшую работу, чем тот, который у меня был. (Да!) Снова, проверьте мой блог Если хочешь! Это вторая часть в нашей серии алгоритмов JavaScript (Cue the SSSR Music).
После окончания Bubble Sort мы переходим к следующему алгоритму сортировки JavaScript – Sortection Sort.
Сорта выбора в некоторой степени похожа на Bubble Sort, но вместо сначала сортируя более высокие значения, помещая их в правильные положения, мы сначала размещаем меньшие значения в правильные положения. Мы все еще повторяем весь массив (в основном) так же.
Вопрос в том, как? Нам нужно хранить наименьшее значение в какой -то переменной контейнера. Тогда это значение может быть переработано в зависимости от значения других элементов (если какой -то элемент меньше, чем уже самый маленький элемент в массиве).
- Храните первый элемент в массиве внутри ‘Наименьшая переменная контейнера’
- Алгоритм будет выполнять через массив, сравнивая текущий элемент и текущую наименьшую переменную на каждой итерации
- Алгоритм обновит значение наименьшей переменной, если текущий элемент меньше, чем наименьшая переменная контейнера
- Если не алгоритм просто продолжается, пока не достигнет конца массива
- Алгоритм затем обменяется текущим элементом и наименьшей переменной
- Алгоритм повторяет процесс, переходящий от шага 1. до 5.
Давайте визуализируем этот алгоритм, используя входы [11, 17, 5, 28, 3, 6, 15] . Визуализация была сделана с использованием этого удивительного бесплатного инструмента под названием Visualgo Анкет
Первоначально наименьшее значение присваивается первое значение в массиве (красный элемент). Затем алгоритм итерация проходит через элементы и сравнивает наименьшее значение и текущий элемент (зеленый), и если он находит меньшее значение, он перестраивает это значение. В конце каждой итерации алгоритм заменяет текущий самый маленький элемент с первым элементом в итерации, и, следовательно, самый маленький элемент сортируется в соответствующем месте (изменение цвета на оранжевый).
function selectionSort(arr) {
for (let i = 0; i < arr.length; i++) {
let smallest = i;
let j = i + 1;
for (; j < arr.length; j++) {
if (arr[j] < arr[smallest]) {
smallest = j;
}
}
if (i !== smallest) {
[arr[smallest], arr[i]] = [arr[i], arr[smallest]];
}
}
return arr;
}
selectionSort([11, 17, 5, 28, 3, 6, 15]);
В начале каждой внешней итерации мы установили наименьшее значение для первого значения в массиве. В том же блоке (потому что мы используем объявление ES6 Let), мы объявляем значение J как i + 1. Тогда мы просто проходим каждый элемент в массиве. Если мы найдем меньшее значение, чем самое маленькое наименьшее значение, то мы пересмотрим наименьший индекс, чтобы быть J. В конце каждой итерации мы просто обмениваемся значениями, если есть меньшее значение, и оно не равно значению, которое мы начали с использования – [arr [j], arr [j + 1]] = [arr [j + 1], arr [j]] – Спасибо ES6.
Подобно пузырьковой сортировке, средний Big O выбора сортировки – O (N2), потому что (опять же) мы сравниваем каждый элемент с любым другим элементом в массиве. Если количество элементов будет расти, время выполнения будет расти в геометрической прогрессии. Сорта выбора может быть более полезной, чем сортировка пузырьков, когда мы хотим использовать алгоритм, который уменьшает обмена, потому что алгоритм меняет только один раз – в конце каждого цикла.
Вот и все! Следующим, о котором мы поговорим, является вставка, поэтому, пожалуйста, следите за обновлениями и счастливым кодированием:).
Оригинал: “https://dev.to/bracikaa/javascript-sorting-algorithm-selection-sort-178j”