Ідея: робимо проходи по масиву, порівнюючи сусідні елементи і міняючи їх місцями, якщо вони “в неправильному порядку”. Інваріант: після кожного проходу найбільший елемент “спливає” у кінець (позиція n-1-pass).
void bubble_sort(int a[], int n) {
for (int pass = 0; pass < n - 1; ++pass) {
for (int j = 0; j < n - 1 - pass; ++j) {
if (a[j] > a[j + 1]) std::swap(a[j], a[j + 1]);
}
}
}