{$R-,S-}
PROGRAM Porzadkowanie_Liczb_Rosnaco_Malejaco;

USES Crt;

TYPE Tab = ARRAY[1..2598] OF Integer;

VAR a    : Tab;
    n, i : Word;
    Zn   : Char;

PROCEDURE Losuj(Var x : Tab; l : Word);
Begin
  For i:=1 To l Do x[i]:=Random(100);
End;

PROCEDURE Wypisz(x : Tab; l : Word; t : String);
Begin
  WriteLn;
  WriteLn(t);
  For i:=1 To l Do Write(x[i]:0, ' ');
  WriteLn;
End;

PROCEDURE QuickSort(Var A: Tab; Lo, Hi: Integer); { Sortowanie QuickSort }

  Procedure Sort(l, r: Integer);
  Var i, j, x, y: Integer;
  Begin
    i:=l;
    j:=r;
    x:=a[(l+r)DIV2];
    Repeat
      While a[i] < x Do i:=i+1;
      While x < a[j] Do j:=j-1;
      If i <= j Then
       Begin
         y:=a[i];
         a[i]:=a[j];
         a[j]:=y;
         i:=i+1;
         j:=j-1;
       End;
    Until i > j;
    If l < j Then Sort(l, j);
    If i < r Then Sort(i, r);
  End;

Begin; { QuickSort }
  Sort(Lo,Hi);
End;

PROCEDURE Sort_Mal(Var x : Tab; l : Word); { Sortowanie bħbelkowe }
Var P : Boolean;
    B : Integer;
Begin
  Repeat
    P:=True;
    For i:=l DownTo 2 Do
      If x[i] > x[i-1] Then
        Begin
          B:=x[i];
          x[i]:=x[i-1];
          x[i-1]:=B;
          P:=False;
        End;
  Until P=True;
End;

BEGIN
  ClrScr;
  WriteLn('                                  PROGRAM : ');
  WriteLn('                            Porzadkowanie Liczb. ');
  WriteLn;
  Write('Podaj ile liczb losowac : ');
  ReadLn(n);
  Randomize;
  Losuj(a, n);
  Wypisz(a, n, 'Wylosowane liczby :');
  QuickSort(a, 1, n);
  Wypisz(a, n, 'Liczby uporzadkowane rosnaco :');
  Sort_Mal(a, n);
  Wypisz(a, n, 'Liczby uporzadkowane malejaco :');
  Zn:=ReadKey;
END.