{| 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. |
|