Rez:integer; {Rez - додаткова змінна для обміну елементів масиву між собою)
Begin
For i:=1 to N do
For j:=1 to N-i do
If Mas[j]>Mas[j+l] then
Begin
{Обмін елементів масиву через третю змінну}
Rez:=Mas[j]; Mas [ j]:=Mas [ j+1] ; Mas [ j+1]:=Rez ;
End;
End.
Зверніть увагу, що в цьому алгоритмі у вкладеному циклі, що безпосередньо здійснює порівняння елементів, змінна циклу змінюється за іншим законом, ніж у попередньому випадку: від 1 до N-i, де і — змінна циклу зовнішньої команди повторення.
Другий метод модифікації алгоритму «бульбашки» полягає в тому, що ми вводимо додаткову змінну булівського типу (так званий прапорець), яка фіксуватиме при черговому проході була здійснена хоча б одна перестановка елементів чи ні. Адже очевидно, що якщо при черговому проході не відбулося жодної перестановки, то масив уже відсортований і процес перегляду можна припинити. Домовимось вважати прапорець «опущеним» (тобто рівним значенню false), якщо перестановки не відбулося, і «піднятим» (рівним true) — у протилежному випадку. Крім того, як і в попередньому випадку, після кожного проходу по масиву найбільший елемент «спливає» угору, тобто займає своє позицію. Тому вводимо додаткову змінну к, що фіксує праву границю впорядкованості, тобто при першому проході к = 1 і ми впорядковуємо всі елементи від 1 до N - 1, на другому проході к = 2 і будуть впорядковуватись усі елементи від 1 до N- 2 (останній елемент уже впорядкований) і так далі. Програма має вигляд:
Program Bubble ; {Сортування за зростанням}
Const N=20;
Var Mas : array [1.. N ] of integer ;
i , j , k : integer ; { i , j — змінні циклу, k — змінна, що фіксує праву границю впорядкування}
Rez : integer ; { Rez — додаткова змінна для обміну елементів масиву між собою}
Flag : Boolean ; { Flag — змінна, що фіксує, відбулася перестановка чи ні}
Begin
k :=1;
Repeat
Flag := false ; {Робимо припущення, що масив відсортований, а потім перевіряємо, чи правильним було це припущення, тобто чи немає серед елементів таких, що неправильно розташовані, якщо такі елементи будуть, то ми їх переставляємо і Flag присвоюємо значення true }
For і:=1 to N-k do
If Mas[i]>Mas[i+1]
then
begin