Bubble Sort – один из наиболее широко обсужденных алгоритмов, просто из-за отсутствия эффективности для сортировки массивов. Если массив уже отсортирован, Bubble Sort будет проходить через массив только один раз (используя концепцию два ниже), однако в худшем случае – это время выполнения O (N²), которое чрезвычайно неэффективно.
Даже бывший президент Барак Обама признает неэффективность пузырькового сорта.
Когда мы составляем скорость роста O (n²), мы видим, что по сравнению с другими алгоритмами сортировки, такими как сортировка слияния, который является O (n log n), он растет на гораздо более быстрой масштабе.
Учитывая злодеяльность, которая является пузырьком, что еще важно понимать алгоритм и расшифровать, почему это так плохо.
Давайте углубимся на две концепции для кодирования пузыря.
- Итайте через массив и проверьте каждый элемент на следующий элемент в массиве.
- Если текущий элемент больше, чем следующий элемент, поменяйте их.
- Если он не больше, переместите указатели вверх и сравните следующие два элемента.
- Как только мы достигнем конца массива, мы знаем, что самый большой элемент находится в последней позиции.
- Повторите этот процесс N раз, где n – длина массива, и каждый раз, итерации до последнего сортировки элемента.
Визуализация концепции 1.
Давайте посмотрим, как это будет работать на массиве длины 6.
Концепция 1 код
Нам нужно иметь два указателя (два вложенных петель) для концепции один. Каждый раз, когда мы переживаем, верхняя граница уменьшается на один, так как мы знаем, что этот индекс содержит отсортированное значение.
function bubbleSortConcept1(arr) {
for (let j = arr.length - 1; j > 0; j--) {
for (let i = 0; i < j; i++) {
if (arr[i] > arr[i + 1]) {
let temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
}
- Итайте через массив и проверьте каждый элемент на следующий элемент в массиве.
- Если текущий элемент больше, чем следующий элемент, поменяйте их.
- Укажите, что подкачки состоялись.
- Если смена произошла, снова снова через массив.
- Мы знаем, что массив отсортирован, когда никаких свопов не произошло.
Концепция 2 кода
Нам нужна только один указатель с этим методом, поскольку мы используем переменную для хранения логика, указывающие, произошло ли или нет или нет. В отличие от Concept One, эта концепция требует, чтобы мы проиграли через каждый элемент в массиве каждый раз, когда мы проходим через него.
function bubbleSortConcept2(arr) {
let swapped;
do {
swapped = false;
console.log(arr);
arr.forEach((item, index) => {
if (item > arr[index + 1]) {
// Save the value to a variable so we don't lose it
let temp = item;
arr[index] = arr[index + 1];
arr[index + 1] = temp;
swapped = true;
}
})
} while (swapped);
}
Bubble Sort – одна из самых неэффективных алгоритмов сортировки, приходящих в O (n²). В худшем случае нам придется сравнивать каждый элемент против каждого другого элемента в массиве, поэтому O (n²).
Оригинал: “https://dev.to/emmabostian/bubble-sort-in-javascript-2con”