Online C Compiler
Открыть в компиляторе

Учебная версия на русском. Код и его вывод сохранены в исходном виде.

Пузырьковая сортировка на C

Меняйте соседние элементы и наблюдайте, как наибольший перемещается к концу.

Открыть в компиляторе

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

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

Флаг обменов позволяет завершить работу, если массив уже упорядочен. Тогда лучший случай требует O(N), но общий и худший случаи остаются O(N²). Дополнительная память — O(1).

Не обращайтесь к arr[j + 1], когда j уже указывает на последний элемент. Проверьте дубликаты и обратный порядок. Обмен только при строгом превышении сохраняет порядок равных значений.

Код C

#include <stdio.h>
#include <stdbool.h>

void bubble_sort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        bool swapped = false;
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                swapped = true;
            }
        }
        if (!swapped) break; // Array is already sorted
    }
}

void print_array(const int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main(void) {
    int data[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(data) / sizeof(data[0]);

    printf("Original array: ");
    print_array(data, n);

    bubble_sort(data, n);

    printf("Sorted array:   ");
    print_array(data, n);
    return 0;
}
Открыть в компиляторе

Ожидаемый вывод

Original array: 64 34 25 12 22 11 90 
Sorted array:   11 12 22 25 34 64 90 

Частые вопросы

Почему код и вывод остаются на английском?

Ключевые слова, идентификаторы и строки, проверяемые тестами, сохранены, чтобы не менять программу. Объяснения и элементы управления переведены.