Рубрики
Без рубрики

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

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

Автор оригинала: Mila Lukic.

Вступление

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

Это означает, что он преобразует входную коллекцию, используя никаких вспомогательных структур данных, и что вход переопределен выходной (алгоритм вместо этого).

Кроме того, во время его выполнения он только читает элементы списка через одно абстрактное управление сравнения, обычно оператора «меньше или равно» (алгоритм сравнения).

Наконец, порядок дубликатов элементов не сохраняется после сортировки (нестабильный алгоритм).

Обычно преподается рано в большинстве курсов компьютерных наук, учитывая, что он очень легко понять и перевести в код. Несмотря на его квадратичную сложность времени, он имеет преимущества производительности над некоторыми более сложными алгоритмами сортировки, таких как QuickSort или Сортировка слияния в некоторых конкретных случаях.

В этой статье мы объясним идею отбора отбора и внедрять его в JavaScript.

После этого мы проанализируем своевременную сложность и сравним его с другими алгоритмами сортировки. Наконец, мы обсудим, когда его можно будет использовать, а также, когда его следует избегать.

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

Этот алгоритм делит массив ввода в два сублиста – A отсортировано и несортированный сублиста. Сортированный список расположен в начале коллекции, и все элементы справа от окончательного отсортированного элемента считаются несортированными.

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

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

Это повторяется, нахождение подходящего элемента, поднимая его с левым элементом царствующего списка и расширяя отсортированный список, чтобы включить его.

После каждой итерации необходимо проверить один из меньшего элемента, пока весь массив или список не сортируется. Другими словами, после k-th Итерация, первая к Элементы массива или списка гарантированы отсортированы.

Давайте посмотрим на это визуальное представление о том, как сортировка отбора работает на массиве:

 5, 2, 4, 6, 1, 3
Визуализация сортировки отбора

Сортировка отбора. Реализация

Теперь, когда мы достигли идеи отбора Sourt и его визуального представления, мы можем перейти к реализации алгоритма в JavaScript:

function selectionSort(inputArr) { 
    let n = inputArr.length;
        
    for(let i = 0; i < n; i++) {
        // Finding the smallest number in the subarray
        let min = i;
        for(let j = i+1; j < n; j++){
            if(inputArr[j] < inputArr[min]) {
                min=j; 
            }
         }
         if (min != i) {
             // Swapping the elements
             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 ) является довольно плохим временем сложность для сортировки алгоритма. При сортировке коллекции вы бы использовали более быстрые алгоритмы сортировки, такие как QuickSort или Сортировка слияния С сложной сложности O (nlogn) Отказ

Лучший случай производительности отбора – также O (n 2 ) Так что проверяйте, отсортирован ли массив или список или не является неэффективным.

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

Сортировка вставки Однако, однако, может быть быстрее, чем выбор, если коллекция почти отсортирована. И вставные сортировка в значительной степени непобедится с короткими коллекциями.

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

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

Возможно, самый известный вариант – Куча сортировки , что внутренне использует куча Структура данных для хранения элементов. Использование кучей может ускорить находку и удаление элементов к O (logn) время.

Это очень полезная оптимизация, которая уменьшает общее время работы от O (n ^ 2) к O (nlogn) , который считается хорошим для сортировки алгоритмов.

Другой вариант – это Двунаправленный отбор сортировки , похоже на как пузырьковый сорт имеет двунаправленный аналог. Это иногда известно как Коктейль Сортировка (Опять же, похоже на Bubble Cocktail Shiker Сортировать ) и делает ту же работу в ~ 25% меньше сравнения.

Заключение

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

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

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