1

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

Самый известный алгоритм – пузырьковая сортировка (bubble sort, сортировка методом пузырька или просто сортировка пузырьком). Его популярность объясняется интересным названием и простотой самого алгоритма.

Алгоритм попарного сравнения элементов массива в литературе часто называют «методом пузырька», проводя аналогию с пузырьком, поднимающимся со дна бокала с газированной водой. По мере всплывания пузырек сталкивается с другими пузырьками и, сливаясь с ними, увеличивается в объеме. Чтобы аналогия стала очевидной, нужно считать, что элементы массива расположены вертикально друг над другом, и их нужно так упорядочить, чтобы они увеличивались сверху вниз.

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

#include <stdio.h>
#include <conio.h>
 
#define For(a,b) for (a=0 ; a<b ; a++)
 
void bubblesort (int a [] , int n)
{
    // I -> i :D
    int i, j , k;
     
    For(i , n)
    for (j = n - 1; j > i; j--)
        if (a [j - 1] > a [j ]) 
        {
            k = a[j - 1];
            a [j - 1] = a [j ] ;
            a [j ] = k ;
        }
}
void main()
{
    int tmp[5] = {0, 1, 5, 4, 3};
    bubblesort(tmp, 5);
     
    int i;
    For(i, 5)
        printf("%d", tmp[i]);
    getch();
}

В пузырьковой сортировке количество сравнений всегда одно и то же, поскольку два цикла for повторяются указанное количество раз независимо от того, был список изначально упорядочен или нет. Это значит, что алгоритм пузырьковой сортировки всегда выполняет

(n2−n)2

сравнений, где n – количество сортируемых элементов. Данная формула выведена на том основании, что внешний цикл выполняется n – 1 раз, а внутренний выполняется в среднем n / 2 раз.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *