program fox_sort; { (c)2003 Fox++ & Rulezz technologiez http://kiiut.fatal.ru mailto:kurepin@sura.ru } uses crt,dos; const wait='Щаз погодьте...'; afile='f0.bin'; type table=record name : string[20]; kol : integer; time : real; end; type item=record key:integer; end; tfile=file of item; var b : array [1..100] of table; z : item; {записи} i,j,xx: longint; {индекс массива} num : integer; sel : char; {выбор пункта меню} hour1,hour2,min1,min2,sec1,sec2,ms1,ms2 : word; time1,time2 : real; {начальное и конечное время сортировки} procedure menu; forward; procedure filegen; {генератор бинарных файлов} var f0:tfile; z:item; i:integer; begin writeln ('Генерация файла'); assign (f0,afile); write ('# of tfile: '); readln (num); rewrite (f0); randomize; i:=0; while i<=num do begin z.key:=random(32000); write (f0,z); inc(i); end; close (f0); writeln ('Сгенерирован случайный файл из ',num,' элементов.'); readkey; end; procedure print; var f0:tfile; begin assign (f0,afile); reset (f0); while not eof(f0) do begin read(f0,z); write (z.key:5,' '); end; readkey; clrscr; end; procedure result; begin clrscr; writeln (#07,'Результаты сортировки'); writeln; writeln ('Номер записи : ',xx); writeln ('Алгоритм : ',b[xx].name); writeln ('Число элементов : ',b[xx].kol); writeln ('Время : ',b[xx].time:2:3,' с'); readkey; end; procedure prost; var X,Y:array[1..100] of integer; Z:array[1..200] of integer; dx,dy,ix,iy,iz,i,j,G,N:integer; begin clrscr; write('Введите длину массива Y '); readln(dy); writeln('Введите упорядоченый по возрастанию массив Y'); for i:=1 to dy do read(Y[i]); write('Введите длину массива X '); readln(dx); writeln('Введите упорядоченый по возрастанию массив X'); randomize; for i:=1 to dx do read(X[i]); iy:=1; ix:=1; iz:=0; writeln ('Запуск простого слияния'); inc(xx); b[xx].name:='простое слияние'; b[xx].kol:=dx+dy; gettime (hour1,min1,sec1,ms1); while(ix<=dx) and (iy<=dy) do if X[ix]dx then for i:=iy to dy do begin inc(iz); Z[iz]:=Y[i]; end else for i:=ix to dx do begin inc(iz); Z[iz]:=X[i]; end; gettime (hour2,min2,sec2,ms2); writeln ('Завершение простого слияния'); time1:=min1*60+sec1+ms1/100; time2:=min2*60+sec2+ms2/100; b[xx].time:=time2-time1; result; writeln('Полученый массив Z '); for i:=1 to iz do write(Z[i],' '); readkey; end; procedure extl; var f0:TFile; procedure merge(k:integer;var f1,f2,g1,g2:TFile); var outSwitch:boolean; Winner:integer; Used:array[1..2] of integer; Fin:array[1..2]of boolean; current:array[1..2]of Item; procedure GetItem(i:integer); begin if(Used[i]=k)or((i=1)and eof(f1))or((i=2)and eof(f2)) then Fin[i]:=True else if i=1 then read(f1,Current[1]) else read(f2,Current[2]); Used[i]:=Used[i]+1; end; begin OutSwitch:=true; rewrite(g1);rewrite(g2); reset(f1);reset(f2); while (not eof(f1)) or (not eof(f2)) do begin Used[1]:=0;Used[2]:=0; Fin[1]:=false;Fin[2]:=false; GetItem(1);GetItem(2); while (not Fin[1])or(not Fin[2]) do begin if Fin[1] then Winner :=2 else if Fin[2] then Winner:=1 else if Current[1].key