Визуализация алгоритмов сортировки [дополняется]

Алгоритмы сортрировки

Увидев видео с визуализацией сортировок, решил создать свой вариант. Скажу сразу вам скорее всего никогда не понадобиться писать свои сортировки. (Зачем я их пишу? Выглядит красиво + возможно кому-то в вузе понадобиться для сдачи Алгоритмов и Структур данных) Мы разберем только принципы работы.

Сортировка Пузырьком (Bubble sort)

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

Реализация на javascript:

  let array = [4,5,2,1,3];;
for (let i = 0; i < array.length; i++) {
// в конце уже отсортированные элементы их можно исключить
for (let j = 0; j < array.length - i - 1; j++) {
// сравнение элементов если j > j + 1 меняются местами
if (array[j] > array[j + 1]) {
[array[j], array[j + 1]] = [array[j + 1], array [j]]
}
}
}

Визуализация
Черные элементы сравниваются, если первый элемент больше второго они меняются местами

В конец списка всплывают отсортированые элементы и окрашиваются в зеленый.

Сортировка перемешиванием (Cocktail sort)

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

Реализация:

  let array = [4,5,2,1,3];
let left = 0;
let right = array.length - 1;
do {
// наибольший элемент перемещается в конец списка
for (let i = left; i < right; i++) {
if (array[i] > array[i + 1]) {
[array[i], array[i + 1]] = [array[i + 1], array [i]]
}
}
right--;
// наименьший в начало
for (let i = right; left < i; i--) {
if (array[i] < array[i - 1]) {
[array[i], array[i - 1]] = [array[i - 1], array [i]]
}
}
left++;
} while (left < right);
}

Визуализация:

Сортировка выбором (Selection sort)

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

  let array = [4,5,2,1,3];
for (let i = 0; i < array.length; i++) {
// считаем первый элемент минимальным
let min = i;
//
for (let j = i + 1; j < array.length; j++) {
// поиск минимального
if (array[min] > array[j]) {
min = j;
}
}
if (min !== i) {
// замена местами минимального и еще не отсоритровоного элемента.
[array[i], array[min]] = [array[min], array[i]]
}
}

Визуализация

Синим отмечен найденный наименьший элемент.

[статья не закончена]