Sancho, ну, вот так например:
| Код | uses dos, graph;
function GetTime: LongInt; Var h, m, s, ms: Word; begin Dos.GetTime(h, m, s, ms); GetTime := longint(ms) + 100 * (s + 60 * (m + 60 * h)); end;
procedure ShellSort(var Arr : array of Real; N : Integer); var C: Boolean; Tmp: Real;
E, G: Integer; I, J: Integer; begin N:=N-1; g:=((n+1) div 2); repeat
i:=g; repeat
j:=i-g; c:=True; repeat
if Arr[j]<=Arr[j+g] then c:=False else begin Tmp:=Arr[j]; Arr[j]:=Arr[j+g]; Arr[j+g]:=Tmp; end; dec(j)
until not((j>=0)and(C)); inc(i)
until not(i<=n); g:=g div 2;
until not(g>0); end;
procedure PrintArray(var Arr: array of real; const n: integer); var i: integer; begin for i := 0 to pred(n) do write(arr[i]:7:2); writeln; end;
const size = 10 * 640; nEvents = 33; kvant = size div nEvents;
var sizeEvent, Times: array[1 .. nEvents] of word;
buf: array[0 .. size - 1] of real; i, Event: integer; Average: LongInt; tm, tm1: longint;
var grDriver: Integer; grMode: Integer; ErrCode: Integer; X, Y: integer; s: string; const DY = 40;
begin randomize; for i := 1 to nEvents do sizeEvent[i] := i * kvant;
Average := 0; for Event := 1 to nEvents do begin
for i := 0 to pred(sizeEvent[Event]) do buf[i] := (random(10000) + 100) / 100; { PrintArray(buf, sizeEvent[Event]); }
tm1 := GetTime; ShellSort(buf, sizeEvent[Event]); tm := GetTime; Times[Event] := (tm - tm1); Average := Average + Times[Event]; writeln('Event = ', Event, '; time = ', Times[Event], ' size = ', sizeEvent[Event]);
{ PrintArray(buf, sizeEvent[Event]); }
end; writeln('average time = ', average div nEvents); writeln('press Enter to view the diagram...'); readln;
grDriver := Detect; InitGraph(grDriver, grMode, ''); ErrCode := GraphResult; if ErrCode = grOk then begin rectangle(0, 0, getmaxx, getmaxy - DY); moveto(0, getmaxy - DY); setcolor(red); settextjustify(centertext, centertext); settextstyle(defaultfont, vertdir, 0); for event := 1 to nEvents do begin lineto(sizeevent[event] div 10, (getmaxy - DY) - 5 * times[event]); X := getx; Y := gety; str(sizeevent[event], s); outtextxy(sizeevent[event] div 10, getmaxy - (DY div 2), s); moveto(X, Y); end;
Readln; CloseGraph; end else Writeln('Graphics error:', GraphErrorMsg(ErrCode));
end. |
(правда, по оси OY я не стал выводить шкалу. Нужно - добавь сам, по аналогии с тем, как я сделал)... |