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.