PROGRAM quicksort;
USES crt,dos;
CONST max = 30000;
TYPE Index = 1..max;
Feld = ARRAY[Index] OF integer;
VAR a:Feld;
st1,mi1,se1,hu1,st2,mi2,se2,hu2,z:word;
i,j,k,vgl,vert:longint;
dauer,zeit1,zeit2:extended;
PROCEDURE sortieren(links,rechts:index);
VAR i,j:index; x,h:index;
Begin
i:=links;
j:=rechts;
if j>i then begin
x:=a[rechts];
repeat
while a[i]<x do inc(i);
while a[j]>=x do dec(j);
if i<j then begin
h:=a[i];
a[i]:=a[j];
a[j]:=h; {vertauschen}
inc(vert);
inc(i);
dec(j);
end;
until i>j;
h:=a[i];
a[i]:=x; { letztes Element an richtige Stelle}
a[rechts]:=h;
sortieren(links,j);
sortieren(i+1,rechts);
end;
end;
PROCEDURE Zufallsbelegung(VAR a: Feld);
VAR i: Index;
BEGIN
Randomize;
FOR i := 1 TO max DO begin
a[i]:=random(max);
{ write(a[i],' ');}
end;
writeln;
END;
PROCEDURE Ausgabe(VAR a: Feld);
VAR i: Index;
BEGIN
writeLn('Die sortierten Zahlen:');
FOR z := 1 TO max DO write(a[z],' ');
END;
BEGIN
clrscr;
vgl:=0;
vert:=0;
writeLn('Sortieren von ', max, ' ganzen Zahlen.');
Zufallsbelegung(a);
gettime(st1,mi1,se1,hu1);
writeln('Startzeit: ',st1,':',mi1,':',se1,':',hu1);
Sortieren(1,max);
gettime(st2,mi2,se2,hu2);
writeln(' Endzeit: ',st2,':',mi2,':',se2,':',hu2);
zeit1:=st1*3600+mi1*60+se1+hu1/100;
zeit2:=st2*3600+mi2*60+se2+hu2/100;
dauer:=zeit2-zeit1;
writeln('Dauer des Sortiervorganges: ',dauer:10:8,' Sekunden');
writeln('Anzahl der Vertauschungen: ',vert,' Vergleiche: ',vgl);
{ Ausgabe(a);}
readln;
END.