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.