program salidzinat;
uses crt,dos;
const
     n=900;
type
    mas=array[1..n] of byte;
    mas1=array[1..n] of integer;
    mas2=array[1..n] of real;

var
   a:mas;
   b:mas1;
   c:mas2;
   sk:longint;
   i,j,k,t:longint;
   solis ,x:longint;
   lv:boolean;
   h,min,sec,msec:word;
   h1,min1,sec1,msec1:word;
   h2,min2,sec2,msec2:word;
procedure mainita( var t,u:byte);   {mainisana byte tips}
var c:integer;
begin
     c:=t;
     t:=u;
     u:=c;
end;
procedure mainitb( var t,u:integer);    {mainisana integer tips}
var c:integer;
begin
     c:=t;
     t:=u;
     u:=c;
end;
procedure mainitc( var t,u:real);     {mainisana real tips}
var c:real;
begin
     c:=t;
     t:=u;
     u:=c;
end;
Procedure Sorta(sv,bv:integer);        {hoara metode augosa seciba 1mas.}
Var
   i,j:integer;
Begin
     if sv>=bv then exit;
        i:=sv; j:=bv;
        solis:=-1; lv:=false;
     repeat
           if lv=(a[i]>=a[j]) then
           begin
                inc(sk);
                mainitb(i,j);
                mainita(a[i],a[j]);
                solis:=-solis;
                lv:=not lv;
           end
           else begin
                inc(sk);
           end;
           j:=j+solis;
      until i=j;
      sorta(sv,i-1);
      sorta(i+1,bv);
end;
Procedure Sortb(sv,bv:integer);            {hoara metode augosa seciba 2mas.}
Var
   i,j:integer;
   w,x:integer;
Begin
     if sv>=bv then exit;
     i:=sv; j:=bv;
     solis:=-1; lv:=false;
     repeat

           if lv=(b[i]>=b[j]) then
           begin
                inc(sk);
                mainitb(i,j);
                mainitb(b[i],b[j]);
                solis:=-solis;
                lv:=not lv;
           end
           else begin
           inc(sk);
           end;
           j:=j+solis;
      until i=j;
      sortb(sv,i-1);
      sortb(i+1,bv);
end;
Procedure Sortc(sv,bv:real);           {hoara metode augosa seciba 3mas.}
Var
   i,j:integer;
Begin
     if sv>=bv then exit;
     i:=round(sv); j:=round(bv);
     solis:=-1; lv:=false;
     repeat
           if lv=(c[i]>=c[j]) then
           begin
                inc(sk);
                mainitb(i,j);
                mainitc(c[i],c[j]);
                solis:=-solis;
                lv:=not lv;
           end
           else begin
                inc(sk);
           end;
           j:=j+solis;
      until i=j;
      sortc(sv,i-1);
      sortc(i+1,bv);
end;
Procedure Sortadil(sv,bv:integer);       {hoara metode dilstosa seciba 1mas.}
Var
   i,j:integer;
Begin
     if sv>=bv then exit;
        i:=sv; j:=bv;
        solis:=-1; lv:=false;
     repeat
           if  lv=(a[i]<=a[j])then
           begin
                inc(sk);
                mainitb(i,j);
                mainita(a[i],a[j]);
                solis:=-solis;
                lv:= not lv;
           end
           else
           begin
                inc(sk);
           end;
           j:=j+solis;
      until i=j;
      sortadil(i+1,bv);
      sortadil(sv,i-1);
end;
Procedure Sortbdil(sv,bv:integer);       {hoara metode dilstosa seciba 1mas.}
Var
   i,j:integer;
   w,x:integer;
Begin
     if sv>=bv then exit;
     i:=sv; j:=bv;
     solis:=-1; lv:=false;
     repeat
           if lv=(b[i]<=b[j]) then
           begin
                inc(sk);
                mainitb(i,j);
                mainitb(b[i],b[j]);
                solis:=-solis;
                lv:=not lv;
           end
           else begin
                inc(sk);
           end;
           j:=j+solis;
      until i=j;
      sortbdil(i+1,bv);
      sortbdil(sv,i-1);
end;
Procedure Sortcdil(sv,bv:real);         {hoara metode dilstosasa seciba 1mas.}
Var
   i,j:integer;
Begin
     if sv>=bv then exit;
     i:=round(sv); j:=round(bv);
     solis:=-1; lv:=false;
     repeat
           if lv=(c[i]<=c[j]) then
           begin
                inc(sk);
                mainitb(i,j);
                mainitc(c[i],c[j]);
                solis:=-solis;
                lv:=not lv;
           end
           else begin
           inc(sk);
           end;
           j:=j+solis;
      until i=j;
      sortcdil(sv,i-1);
      sortcdil(i+1,bv);
end;
begin
     clrscr;
     randomize;              {pieskiram gadijuma skaitlus visam masivam}
     for i:=1 to n do  {skaitli intervala 0..256 jo mums ir  masivs tipa byte}
     begin
         a[i]:=random(256);
         b[i]:=a[i];
         c[i]:=a[i];

     end;
     h:=0; min:=0; sec:=0; msec:=0; sk:=0;
     settime(h,min,sec,msec);       {uzdodam laiku}
     sorta(1,n);
     gettime(h,min,sec,msec);    {fiksejam kartosanas laiku}
     writeln('               sakartojam visus 3 masivus augosa seciba');
     for i:=1 to 80 do
     write('-');
     writeln;
     write('masivam    BYTE| ' );
     write('laiks ir| ',h,' st ' ,min,' min ' ,sec,' sec ',msec:2,' msec |');
     writeln(' main. skaits ir | ',sk);
     for i:=1 to 80 do
         write('-');
     writeln;
     h1:=0; min1:=0; sec1:=0; msec1:=0; sk:=0;
     settime(h1,min1,sec1,msec1);
     sortb(1,n);
     gettime(h1,min1,sec1,msec1);
     write('masivam INTEGER| ' );
     write('laiks ir| ',h1,' st ' ,min1,' min ' ,sec1,' sec ',msec1:2,' msec |');
     writeln(' main. skaits ir | ',sk);
     for i:=1 to 80 do
         write('-');
     writeln;
     h2:=0; min2:=0; sec2:=0; msec2:=0; sk:=0;
     settime(h2,min2,sec2,msec2);
     sortc(1,n);
     gettime(h2,min2,sec2,msec2);
     write('masivam    REAL| ' );
     write('laiks ir| ',h2,' st ' ,min2,' min ' ,sec2,' sec ',msec2:2,' msec |');
     writeln(' main. skaits ir | ',sk);
     for i:=1 to 80 do
         write('-');
     writeln;
     h:=0; min:=0; sec:=0; msec:=0; sk:=0;
     settime(h,min,sec,msec);
     sorta(1,n);
     gettime(h,min,sec,msec);
     writeln('               veican kartosanu sakartotam masivam');
     for i:=1 to 80 do
         write('-');
     writeln;
     write('augoss     BYTE| ' );
     write('laiks ir| ',h,' st ' ,min,' min ' ,sec,' sec ',msec:2,' msec |');
     writeln(' main. skaits ir | ',sk);
     for i:=1 to 80 do
         write('-');
     writeln;
     h1:=0; min1:=0; sec1:=0; msec1:=0; sk:=0;
     settime(h1,min1,sec1,msec1);
     sortb(1,n);
     gettime(h1,min1,sec1,msec1);
     write('augoss  INTEGER| ' );
     write('laiks ir| ',h1,' st ' ,min1,' min ' ,sec1,' sec ',msec1:2,' msec |');
     writeln(' main. skaits ir | ',sk);
     for i:=1 to 80 do
         write('-');
     writeln;
     h2:=0; min2:=0; sec2:=0; msec2:=0; sk:=0;
     settime(h2,min2,sec2,msec2);
     sortc(1,n);
     gettime(h2,min2,sec2,msec2);
     write('augoss     REAL| ' );
     write('laiks ir| ',h2,' st ' ,min2,' min ' ,sec2,' sec ',msec2:2,' msec |');
     writeln(' main. skaits ir | ',sk);
     for i:=1 to 80 do
         write('-');
     writeln;
     h:=0; min:=0; sec:=0; msec:=0;  sk:=0;
     settime(h,min,sec,msec);
     sortadil(1,n);
     gettime(h,min,sec,msec);
     writeln('               veicam kartosanu preteja seciba sakartotam masivam');
     for i:=1 to 80 do
         write('-');
     writeln;
     write('dilst.     BYTE| ' );
     write('laiks ir| ',h,' st ' ,min,' min ' ,sec,' sec ',msec:2,' msec |');
     writeln(' main. skaits ir | ',sk);
     for i:=1 to 80 do
         write('-');
     writeln;
     h1:=0; min1:=0; sec1:=0; msec1:=0; sk:=0;
     settime(h1,min1,sec1,msec1);
     sortbdil(1,n);
     gettime(h1,min1,sec1,msec1);
     write('dilst.  INTEGER| ' );
     write('laiks ir| ',h1,' st ' ,min1,' min ' ,sec1,' sec ',msec1:2,' msec |');
     writeln(' main. skaits ir | ',sk);
     for i:=1 to 80 do
         write('-');
     writeln;
     h2:=0; min2:=0; sec2:=0; msec2:=0; sk:=0;
     settime(h2,min2,sec2,msec2);
     sortcdil(1,n);
     gettime(h2,min2,sec2,msec2);
     write('dilst.     REAL| ' );
     write('laiks ir| ',h2,' st ' ,min2,' min ' ,sec2,' sec ',msec2:2,' msec |');
     writeln(' main. skaits ir | ',sk);
     for i:=1 to 80 do
     write('-');
     writeln;
readkey;
end.