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.