program heap_sort_test_auf_Zeitverhalten; uses crt,dos; const maxN = 10000; Datei = 'c:sorting.int'; var a : array[1..maxN] of word; h : array[0..maxN] of word; (* der Heap *) L,N,M : integer; (* Anzahl der eingegeben Zahlen*) 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); L:=i; close(dat); end; procedure print_words( ab:integer); var i : integer; begin for i:=ab to L do write(a[i],' '); writeln; writeln('*** ende *** '); end; procedure print_sortet_words( ab:integer); var i : integer; begin for i:=ab to M do write(H[i], ' '); writeln; writeln('*** ende *** '); end; procedure upheap(k :integer); var v : word; begin v:=H[k]; while ( H[k div 2] <= v ) do begin H[k]:=H[k div 2]; k:=k div 2; end; H[k]:=v; end; procedure downheap( k:integer); label 0; var j : integer; v : word; begin v:=H[k]; while k<=N div 2 do begin j:=k+k; if j<N then if H[j]<H[j+1] then j:=j+1; if v>=H[j] then goto 0; H[k]:=H[j]; k:=j; end; 0: H[k]:=v; end; procedure create_heap; var i : integer; begin H[0]:=65535; (* Maximum *) for i:=1 to L do begin H[i]:=a[i]; upheap(i); end; M:=L; end; procedure heapsort; var k : integer; t : word; begin N:=M; repeat t:=H[1]; H[1]:=H[N]; H[N]:=t; N:=N-1; downheap(1); until N<=1; end; (*************************** Main ***********************) var hour,minute,s,s1 : word; begin clrscr; writeln(' *** Heap-Sort *** : Test des Zeitverhaltens beim '); writeln(' Sortieren von ',maxN,' Zahlen '); writeln(' aus : ',Datei,' .' ); writeln;writeln; writeln('Es erfolgt das Einlesen der Zahlen .'); lies_words_von_datei(Datei); clrscr; writeln('Fertig ! Jetzt erfolgt das Sortieren . '); gettime(hour,minute,s,s1); writeln(hour, ':' ,minute, ':' ,s, '.' ,s1 ); writeln;writeln; create_heap; writeln('Jetzt wurde gerade der Heap konstruiert : '); gettime(hour,minute,s,s1); writeln('Das dauerte bis : ', hour, ':' ,minute, ':' ,s, '.' ,s1 ); writeln;writeln; heapsort; gettime(hour,minute,s,s1); writeln(hour, ':' ,minute, ':' ,s, '.' ,s1 ); writeln;writeln; readln; print_sortet_words(L-150); readln; end.