program quicksort_test_auf_Zeitverhalten; (* mit Median = a[R] *)
(* Sortiern von 5000 word's aus der Datei 'sorting.int' *)
uses crt,dos;
const maxN = 10000;
Datei = 'c:sorting.int';
var a : array[1..maxN] of word;
N : integer; (* Anzahl der eingegeben WÖrter *)
procedure lies_words_von_datei(datei : string);
var dat : file of word;
i : word;
begin
i:=0;
assign(dat,datei);
reset(dat);
if not eof(dat) then
repeat
i:=i+1;
read(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 write(a[i],' ');
writeln;writeln('*** ende *** ');
end;
procedure quicksort_test(L,R :integer);
var i,j : integer;
t,v : word; (* v ist der kÜnstliche Median *)
begin
if L<R then
begin
v:=a[R];
i:=L-1;
j:=R;
repeat
repeat inc(i) until ( a[i] >= v );
repeat dec(j) 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_test(L,i-1);
quicksort_test(i+1,R);
end;
end;
var h,m,s,s1 :word;
begin
clrscr;
writeln(' ****************************************************************');
writeln(' * *');
writeln(' * quicksort : Test auf Zeitverhalten beim Sortieren *');
writeln(' * von 5000 word''s *');
writeln(' * *');
writeln(' ****************************************************************');
writeln;writeln;
writeln('Es erfolgt jetzt das Einlesen der ',maxN,' Zahlen aus ',Datei,' .');
lies_words_von_datei(Datei);
clrscr;
writeln('Fertig ! Jetzt wird sortiert .');
gettime(h,m,s,s1);
writeln('Anfang : ', h, ':' ,m, ':' ,s, '.' , s1 );
writeln;
quicksort_test(1,N);
gettime(h,m,s,s1);
writeln('Ende : ', h, ':' ,m, ':' ,s, '.' , s1 );
readln;
print_strings(N-150); readln;
end.