Ответ
// Пример алгоритма с квадратичной сложностью O(n²)
function bubbleSort(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; // swap
}
}
}
return arr;
}
// Вложенные циклы делают количество операций пропорциональным n²
// Для массива из 10 элементов - ~100 операций
// Для 100 элементов - ~10,000 операций
Другие примеры:
- Проверка всех пар элементов в массиве
- Некоторые алгоритмы сортировки (например, selection sort)
- Умножение матриц
Ответ 18+ 🔞
Эх, ну и засада, блядь! Смотри, вот тебе классика жанра — пузырьковая сортировка. Алгоритм, от которого у любого нормального программиста волосы дыбом встают, если массив больше, чем на пять элементов.
function bubbleSort(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; // swap
}
}
}
return arr;
}
Суть-то проще пареной репы: он берёт и тупо, как бараш, тыкается носом в каждый элемент, таская самый тяжёлый (или лёгкий) наверх. А чтобы это сделать, ему надо пробежаться по всему массиву внутри другого такого же пробега. Получается этажерка из циклов, ёпта!
Вот и выходит, что если у тебя 10 элементов — он сделает где-то сотню операций, ещё куда ни шло. Но если ты, мудак, сунешь туда сотню элементов — готовься к десяти тысячам операций, блядь! Это как пытаться перебрать всех гостей на свадьбе и каждому пожать руку, а потом ещё и поцеловаться — заебёшься, пиздец.
Где ещё такое овердохуище операций встречается? Да везде, где нужно перебрать все пары! Типа проверить, нет ли в списке имён двух одинаковых Вась — придётся каждое с каждым сравнить. Или тупой перебор всех вариантов. Или перемножение этих ёбаных матриц, где каждый элемент новой — это хуёво-маё из старой.
Короче, алгоритм для маленьких данных — терпимо, а для больших — просто пиздец, медленный, как черепаха в болоте. Нахуй не нужен, если, конечно, ты не мазохист.