Какая временная сложность у пузырьковой сортировки

Ответ

Временная сложность пузырьковой сортировки — O(n²) в худшем и среднем случае, и O(n) в лучшем случае (если массив уже отсортирован).

Почему O(n²):

  • В худшем случае для каждого из n элементов делается n сравнений
  • Даже с оптимизацией (флагом swapped) сложность остаётся квадратичной

Пример кода:

function bubbleSort(arr) {
  let swapped;
  do {
    swapped = false;
    for (let i = 0; i < arr.length - 1; i++) {
      if (arr[i] > arr[i + 1]) {
        [arr[i], arr[i + 1]] = [arr[i + 1], arr[i]];
        swapped = true;
      }
    }
  } while (swapped);
  return arr;
}

Ответ 18+ 🔞

Так, слушай, про эту вашу пузырьковую сортировку. Ну, классика жанра, блядь, как борщ со сметаной. Сложность у неё — O(n²), и это, на минуточку, в самом поганом раскладе и в среднем тоже. А в лучшем, если массив уже красивый, отсортированный, то O(n), но это как выиграть в лотерею, ёпта — бывает, но не надейся.

А почему, блядь, квадрат? Да потому что она тупая, как пробка! Представь: для каждого из n элементов она тупо пробегает по всему массиву и сравнивает. Это как если бы ты в тёмной комнате искал ключи, перебирая каждый раз все углы, даже те, где уже искал. Ну, овердохуища операций, короче.

Даже если воткнуть флаг swapped (типа "а менял ли я что-то?"), чтобы не долбиться в уже отсортированное, всё равно в среднем выходит эта самая квадратичная хуйня. Не отмажешься.

Вот, смотри, как она выглядит в коде, этот древний артефакт:

function bubbleSort(arr) {
  let swapped;
  do {
    swapped = false;
    for (let i = 0; i < arr.length - 1; i++) {
      if (arr[i] > arr[i + 1]) {
        [arr[i], arr[i + 1]] = [arr[i + 1], arr[i]];
        swapped = true;
      }
    }
  } while (swapped);
  return arr;
}

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