Dany jest zbiór { a1 a2 a3 ...an-2 an-1 an }, który należy posortować zgodnie z funkcją porównującą fp(...). W algorytmie zastosowano następujące zmienne:
n liczba elementów w zbiorze
a[...] element zbioru o numerze od 1 do n, podanym w klamrach kwadratowych
i , j zmienne używane na liczniki pętli
p zmienna logiczna używana do sprawdzenia, czy cały zbiór jest już posortowany
t zmienna tymczasowa używana przy wymianie zawartości elementów tablicy
Algorytm rozpoczynamy nadając zmiennej i wartość 0. Zmienna ta pełni funkcję: licznika elementów, które zostały już uporządkowane na końcu zbioru - patrz przykład. Ponieważ jeszcze nie uporządkowano żadnych elementów, dlatego i przyjmuje wartość 0.
W pętli wewnętrznej porównujemy ze sobą kolejne elementy zbioru z elementem następnym. Zmienna p jest znacznikiem uporządkowania zbioru. Przed wejściem do pętli ustawiana jest na wartość logiczną true. Jeśli wewnątrz pętli elementy nie są uporządkowane, tzn. funkcja porównująca fp( a[j] , a[j+1] ) daje w wyniku wartość logiczną false, porównywane elementy są ze sobą zamieniane i znacznik p przyjmuje wartość false. Spowoduje to następny obieg pętli zewnętrznej, która wykonuje się do momentu, aż p będzie miało wartość logiczną true, czyli nie wystąpiła żadna zamiana elementów zbioru, co oznacza jego uporządkowanie.
Po porównaniu elementów i ewentualnej zamianie ich miejsc następuje zwiększenie indeksu j. Jeśli w zbiorze pozostały jeszcze jakieś elementy do porównania, to wykonywany jest następny obieg pętli wewnętrznej.
W przeciwnym razie pętla wewnętrzna jest kończona i następuje zwiększenie o 1 licznika pętli zewnętrznej. Powoduje to zmniejszenie o 1 liczby elementów do porównania w zbiorze - każdy obieg pętli zewnętrznej ustala pozycję ostatniego elementu zbioru - w następnym obiegu nie musimy go już sprawdzać, co przy dużej liczbie elementów znacznie zmniejsza ilość wykonywanych porównań.
Jeśli znacznik uporządkowania zbioru p ma wartość false, to następuje kolejny obieg pętli zewnętrznej. Jest to konieczne, ponieważ zbiór może być nieuporządkowany. Sortowanie kończymy dopiero wtedy, gdy wszystkie pary kolejnych elementów są we właściwym porządku i w trakcie przeglądania zbioru nie wystąpiło żadne przestawienie elementów.