SortBub3 BackText prikladu  
Usporiadanie pola čísel Bublinkovou metódou - hľadanie bublín.  
{| Vzostupné usporiadanie prvkov celočíselného poľa |

 | bublinkovou metódou (hľadanie bublín)            |}

program SortBublinkovaMetoda3;

uses Crt;

var

  a      : array [1..50] of integer;  { pole celych cisel }

  pocet,                              { pocet prvkov pola }

  porovnanie,                         { pocet porovnani v metode }

  vymeny,                             { pocet vykonanych vymen }

  x,                                  { premenna pre vymenu }

  i,                                  { pocitadlo prechodov }

  j           : integer;              { par.cyklu porovnani susedov }

  vymenit     : boolean;              { indikacia nutnosti vymeny }



begin

{--- Inicializacia ---}

  ClrScr;                             { cistenie obrazovky }

  porovnanie:= 0; vymeny:= 0;



{--- Vlozenie celociselnych hodnot ---}

  Write('Vloz pocet celych cisel: '); ReadLn(pocet);        { pocet hodnot }

  WriteLn('==== Vloz iba cele cisla ===');

  for i:= 1 to pocet do begin

    Write(i:3,'. hodnota: '); ReadLn(a[i]);       { cisla do prvkov pola a }

  end;



{--- Kontrolny vypis ---}

  ClrScr;                             { cistenie obrazovky }

  WriteLn('***** Povodne poradie hodnot *****');

  WriteLn('==================================');

  for i:= 1 to pocet do Write(a[i]:8);

  WriteLn;



{*************************************************** Vlastny algoritmus **}

{--- Usporiadanie prvkov ---}

{             Pre kazde i musi platit:  a[i-1] <= a[i]                   |

|             Ak toto neplati nasli sme bublinu, ktoru treba spatnym

|             presunom zaradit na spravne miesto                         |}





  for i:=2 to pocet do begin      {  Hladame bublinu, t.j. prvok,        |

                                   | ktory nie je na spravnom mieste     |}



    Inc(porovnanie);              { mame o porovnanie viac... }

    if a[i-1] > a[i] then begin   {--- Nasli sme bublinu         |}

      vymenit:= TRUE;             {  | musime ju spravne zaradit |}

      j:= i;

    {---- posunutie bubliny ----}

      while vymenit do begin      { pokial je nutne bublinu posunut dolava }

        x:= a[j-1]; a[j-1]:= a[j]; a[j]:= x; {-- vymenime ju              |}

        Inc(vymeny);                         { | s predchadzajucim prvkom |}



        Dec(j);                   { presunieme sa dolava za bublinou }



        if j = 1 then vymenit:= FALSE;       {= bublina je uz na zaciatku  }

        if a[j-1]<a[j] then vymenit:= FALSE; {= prvok prestal byt bublinou }

        Inc(porovnanie);          { mame o porovnanie viac... }

      end;

    end;

  end;

{*************************************************************************}



{--- Vypis vysledkov ---}

  WriteLn('***** Usporiadane pole *****');

  WriteLn('============================');

  for i:= 1 to pocet do Write(a[i]:8);

  WriteLn;

  WriteLn('Pocet porovnani: ', porovnanie);

  WriteLn('Pocet vymen    : ', vymeny);



  Write('Stlac [Enter]'); ReadLn

end.
 
D I S P L A Y      3-krát štartovaný program:  
***** Pôvodné poradie hodnôt *****

==================================

       1       2       3       4       5       6       7

***** Usporiadané pole *****

============================

       1       2       3       4       5       6       7

Počet porovnaní: 6

Počet výmen    : 0

2. štart
***** Pôvodné poradie hodnôt *****

==================================

       7       6       5       4       3       2       1

***** Usporiadané pole *****

============================

       1       2       3       4       5       6       7

Počet porovnaní: 42

Počet výmen    : 21

3. štart
***** Pôvodné poradie hodnôt *****

==================================

       6       5       3       4       7       1       2

***** Usporiadané pole *****

============================

       1       2       3       4       5       6       7

Počet porovnaní: 36

Počet výmen    : 15