[Pascal] sortowanie kubełkowe - objaśnienie kodu programu

Czy może ktoś mi objaśnić ten program sortowanie kubełkowe w pascalu?

program sort_kubelkowe;

uses crt;


var

t:array[1..9] of string;

z,k,i:integer;

s,p:string;


procedure wpisz;

begin

    writeln('Ile elementow ma byc w tablicy?');

    readln(k);

    writeln('Podaj wyrazy do uporzadkowania.');

      for i:=1 to k do

        begin

          readln(s);

          t[i]:=s;

        end;

end;


procedure sortuj;

begin

  z:=0;

  for z:=1 to k-1 do

  for i:=1 to k-z do

    begin

      if t[i]>t[i+1] then

        begin

          p:=t[i];

          t[i]:=t[i+1];

          t[i+1]:=p;

        end;

    end;

end;


procedure wypisz;

begin

  for i:=1 to k do

    writeln(i,'. ',t[i]:3);

end;


begin

  clrscr;

  wpisz;

  sortuj;

  writeln;

  writeln;

  wypisz;

  writeln;

  writeln;

  writeln('Aby zakonczyc wcisnij dowolny klawisz.');

  readln;

end.

Nie kubełkowe, bąbelkowe.

Porównujesz elementy parami, jeżeli ta para leży niepoprawnie to przestawiasz miejscami.

Robisz to po kolei, najpierw 1-y element z 2-im, potem 2-gi z 3-im itd.

Jak przejdziesz wszystkie pary to “najcięższy” element spadnie na samo dno, wiec drugi przebieg robisz o jeden krok krótszy.