Сортировка выбором в JavaScript

В этой статье мы расскажем о концепции сортировки выбором и реализуем ее в JavaScript.

Сортировка выбором

При использовании этого алгоритма массив делится на две части –отсортированную и несортированную. Сортированный список находится вначале. Все элементы справа от последнего отсортированного элемента считаются несортированными.

Изначально отсортированный список пуст. Затем перебирается несортированный список и определяется самый маленький или самый большой элемент. Затем отсортированный подсписок расширяется для включения этого элемента.

После этого программа снова находит подходящий элемент, меняя его на крайний левый элемент несортированного списка и расширяя отсортированный список.

После каждой итерации необходимо проверять на один элемент меньше, пока не будет отсортирован весь массив или список.

Рассмотри, как сортировка выборкой работает с массивом:

 5, 2, 4, 6, 1,
Сортировка выбором

Реализация сортировки выборкой

Перейдем к реализации данного алгоритма в JavaScript:

function selectionSort(inputArr) { 
    let n = inputArr.length;
        
    for(let i = 0; i < n; i++) {
        // Находим наименьшее число в правой части массива
        let min = i;
        for(let j = i; j < n; j++) {
            if(inputArr[j] < inputArr[min]) {
                min=j; 
            }
         }
         if (min != i) {
             // Заменяем элементы
             let tmp = inputArr[i]; 
             inputArr[i] = inputArr[min];
             inputArr[min] = tmp;      
        }
    }
    return inputArr;
}

При переборке массива мы находим наименьшее число в несортированном списке. Если наименьшее число не является первым, меняем его на первый элемент несортированного массива.

Теперь добавим входной массив и вызовем функцию:

let inputArr = [5, 2, 4, 6, 1, 3];
selectionSort(inputArr);
console.log(inputArr);

Результат работы кода:

(6) [1, 2, 3, 4, 5, 6]

Временная сложность алгоритма

На первой итерации, в массиве, состоящем из n элементов, мы делаем n-1 сравнений и одну замену. Во второй итерации мы выполняем n-2 сравнения и т.д. Следовательно, общее количество сравнений будет (n-2) + (n-1) + ... + 1 , что в сумме составит n (n-1) / 2 = (n 2 -n) / 2 . Это дает нам время работы O(n 2 ).

O(n 2 ) – довольно высокий показатель временной сложности алгоритма. При сортировке набора используются более быстрые алгоритмы сортировки с временной сложностью O(nlogn).

С другой стороны, по сравнению с временной сложностью других алгоритмов сортировка выборкой является более эффективной. В том числе пузырьковой и гномьей сортировки.

Но сортировка вставками может выполняться быстрее, чем сортировка выборкой, если набор почти отсортирован. Поэтому сортировка вставкой является приоритетной для коротких наборов данных.

Варианты сортировки выбором

Сортировка выборкой – основа для некоторых популярных и эффективных алгоритмов сортировки! Самым известным из них является множественная сортировка, которая использует структуру данных куча для хранения элементов. Это ускоряет поиск, удаление элементов и временную сложность алгоритма с O (n ^ 2) до O(nlogn).

Другой вариант – двунаправленная сортировка выбором. Она выполняет ту же самую работу на 25% быстрее.

Заключение

Сортировка выбором послужила основой для некоторых широко используемых алгоритмов, но сама по себе редко используется в разработке.

Но если входной набор данных небольшой, то сортировка выбором является лучшим вариантом, чем быстрая сортировка или сортировка слиянием. Но в этих случаях сортировка вставкой оказывается более эффективной.