program quicksort;    (* mit Median = a[R] *)
uses crt;

const  maxN = 50;

var a  : array[1..maxN] of string[50];
    N  : integer;   (* Anzahl der eingegeben WÖrter *)


procedure lies_strings;
var i : integer;
begin
 i:=0;
 repeat
   i:=i+1;
   write('Wort ',i,'  :  ');  readln(a[i]);
 until a[i]='';
 N:=i-1;
end;


procedure lies_strings_von_datei(datei : string);
var dat : text;
    i   : word;
begin
 i:=0;
 assign(dat,datei);
 reset(dat);
 if not eof(dat) then
   repeat
    i:=i+1;
    readln(dat,a[i]);
   until eof(dat);
 N:=i;
 close(dat);
end;





procedure print_strings( ab:integer);
var i : integer;
begin
 for i:=ab to N do  writeln(a[i]);
 writeln('*** ende *** ');
end;


procedure quicksort(L,R :integer);
var i,j       : integer;
    t,v,      (* v ist der kÜnstliche Median *)
    v1,v2,v3  : string[50];
begin
if L<R then
 begin
   v:=a[R];
   i:=L-1;
   j:=R;
   repeat
     repeat  i:=i+1  until ( a[i] >= v );
     repeat  j:=j-1  until ( a[j] <= v );
     t:=a[i];  a[i]:=a[j];  a[j]:=t;
   until j<=i;
   a[j]:=a[i];
   a[i]:=a[R];
   a[R]:=t;
   quicksort(L,i-1);
   quicksort(i+1,R);
 end;
end;



begin
 clrscr;
 lies_strings_von_datei('sorting.asc');
{ lies_strings;}
 print_strings(1);  writeln;writeln; readln;
 quicksort(1,N);
 print_strings(1);  readln;
end.