Розглянемо масив Array, який необхідно відсортувати. В даному алгоритмі нам знадобляться декілька додаткових змінних: наші улюблені герої, які мають справи з будь-якими масивами - iter і jter, N - розмір масиву, і змінна, яка потрібна для тимчасового зберігання значення масиву - x. Код сортування алгоритмом сортування бульбашками буде мати наступний вигляд:
for (iter=1; iter<N; iter++) /* зовнішній цикл */
{
for (jter=N-1; jter>=iter; jter--) /* внутрішній цикл */
{
if (Array[jter]<Array[jter-1]) /* умова перебору */
{
/* міняємо місцями значення масиву*/
/* зберігаємо значення більшого елементу в змінну */
x = Array[jter-1] ;
/* переміщамо менший елемент на одну позицію вліво */
Array[jter-1] = Array[jter] ;
/* більший елемент переміщаємо на одну позицію вправо */
Array[jter] = x ;
}
}
}
В даному алгоримі, знову ж таки, ми маємо два цикли, один вкладений у інший. Зовнішній цикл призначений для перебору усіх елементів з другого по останній (у внутрішьому циклі це враховано). Внутрішній цикл виконаний за допомогою модифікованого лінійного пошуку з інваріантою, і призначений для відсортовування елементів перед поточною позицією зовнішнього циклу. Якщо внутрішній цикл, знайшов елемент, більший за усі інші, він поступово, з кожною ітерацією, буде переміщати його вправо (у випадку порядку зростання), аж поки він не опиниться в самому кінці масиву. Окрім того, зовнішній цикл робить перебір в прямому порядку - від другого до останнього, а внутрішній цикл у зворотньому - від останнього до поточної позиції зовнішнього циклу.
Проста програма, яка використовує даний алгоритм на C++ може виглядати наступним чином:
#include <iostream>
using namespace std;
int main (int argc, char** argv)
{
/* масив даних */
int Array [] = {11, 5, 7, 8, 3, 4, 2, 9, 0, 1, 6, 10, 13, 12} ;
int N = sizeof (Array) / sizeof (Array[0]) ; /* дізнаємося довжину масиву */
int iter, jter, kter ; /* бігунки-ітератори для перебору масиву */
/* змінна, в якій тимччасово зберігається значення елементу масива */
int x ;
/* виводимо масив на екран для наглядності */
for (iter=0; iter<N; iter++)
{ cout << Array[iter] << " " ; }
cout << endl ;
for (iter=1; iter<N; iter++) /* зовнішній цикл */
{
for (jter=N-1; jter>=iter; jter--) /* внутрішній цикл */
{
if (Array[jter]<Array[jter-1]) /* умова перебору */
{
/* міняємо місцями значення масиву*/
/* зберігаємо значення більшого елементу в змінну */
x = Array[jter-1] ;
/* переміщамо менший елемент на одну позицію вліво */
Array[jter-1] = Array[jter] ;
/* більший елемент переміщаємо на одну позицію вправо */
Array[jter] = x ;
}
}
}
/* виводимо масив на екран */
for (iter=0; iter<N; iter++)
{ cout << Array[iter] << " " ; }
cout << endl ;
return 0 ;
}
Пілся виконання програми ми отримаємо наступне:
Для того щоб відсортувати масив в порядку спадання, необхідно замінити оператор '<' на оператор '>' у операторі if внутрішнього циклу алгоритму:
#include <iostream>
using namespace std;
int main (int argc, char** argv)
{
/* масив даних */
int Array [] = {11, 5, 7, 8, 3, 4, 2, 9, 0, 1, 6, 10, 13, 12} ;
int N = sizeof (Array) / sizeof (Array[0]) ; /* дізнаємося довжину масиву */
int iter, jter, kter ; /* бігунки-ітератори для перебору масиву */
/* змінна, в якій тимччасово зберігається значення елементу масива */
int x ;
/* виводимо масив на екран для наглядності */
for (iter=0; iter<N; iter++)
{ cout << Array[iter] << " " ; }
cout << endl ;
for (iter=1; iter<N; iter++) /* зовнішній цикл */
{
for (jter=N-1; jter>=iter; jter--) /* внутрішній цикл */
{
if (Array[jter]>Array[jter-1]) /* умова перебору */
{
/* міняємо місцями значення масиву*/
/* зберігаємо значення меншого елементу в змінну */
x = Array[jter-1] ;
/* переміщамо більший елемент на одну позицію вліво */
Array[jter-1] = Array[jter] ;
/* менший елемент переміщаємо на одну позицію вправо */
Array[jter] = x ;
}
}
}
/* виводимо масив на екран */
for (iter=0; iter<N; iter++)
{ cout << Array[iter] << " " ; }
cout << endl ;
return 0 ; /* вихід з програми */
}
Після виконання даної програми ми отримаємо наступне: