📖 Документация Qumir

← Вернуться в Playground

← Все примеры

Сортировка пузырьком

Простейший алгоритм сортировки. Последовательно сравниваем соседние элементы и меняем их местами, если они стоят в неправильном порядке.

Идея алгоритма

  1. Проходим массив слева направо, сравнивая пары соседних элементов
  2. Если левый больше правого — меняем их местами
  3. После каждого прохода самый большой элемент «всплывает» в конец (как пузырёк в воде)
  4. Повторяем, каждый раз проверяя на один элемент меньше

Разбор

Внешний цикл

нц для i от 0 до n - 2
    ...
кц

Каждый проход «всплывает» один элемент на своё место. После $i$-го прохода последние $i$ элементов уже отсортированы. Нужно $n - 1$ проходов.

Внутренний цикл со сравнением

нц для j от 0 до n - 2 - i
    если A[j] > A[j + 1] то
        tmp := A[j]
        A[j] := A[j + 1]
        A[j + 1] := tmp
    все
кц

Вспомогательные функции

Программа использует две вспомогательные функции:

Сложность: $O(n^2)$ — самый простой для понимания, но медленный на больших массивах.

Полная программа

алг main(цел n)
нач
    если n <= 0 то
        вывод "Размер массива должен быть положительным", нс
        выход
    все

    цел таб A[0:n-1]
    заполнить_случайными(n, A)

    вывод "Исходный массив:", нс
    печать_массива(n, A)

    bubblesort(n, A)

    вывод "Отсортированный массив:", нс
    печать_массива(n, A)
кон

алг bubblesort(цел n, цел таб A[0:n-1])
нач
    цел i, j, tmp
    нц для i от 0 до n - 2
        нц для j от 0 до n - 2 - i
            если A[j] > A[j + 1] то
                tmp := A[j]
                A[j] := A[j + 1]
                A[j + 1] := tmp
            все
        кц
    кц
кон

алг заполнить_случайными(цел n, цел таб A[0:n-1])
нач
    цел i
    нц для i от 0 до n - 1
        A[i] := irnd(100)
    кц
кон

алг печать_массива(цел n, цел таб A[0:n-1])
нач
    цел i
    нц для i от 0 до n - 1
        вывод A[i], " "
    кц
    вывод нс
кон

▶ Запустить пример