Консультация № 197453
19.12.2019, 15:20
0.00 руб.
0 3 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Разработать алгоритм сортировки естественным слиянием. Отсортировать с помощью него
массив.


Приложение:
pascal

Обсуждение

давно
Старший Модератор
31795
6196
19.12.2019, 16:12
общий
Адресаты:
А 196680 разве не подходит?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403308
5
22.12.2019, 23:34
общий
Адресаты:
спасибо ))
давно
Старший Модератор
31795
6196
23.12.2019, 15:32
общий
это ответ
Здравствуйте, dkhrebtovich!

Ответ уже давали раньше см. 196680.
Повторю:
[code lang=pascal h=300]const
n0:string='inpData.dat';
n1:string='File1st.dat';
n2:string='File2nd.dat';
a:array[1..16]of integer=(59,30,99,28,27,87,65,98,25,29,92,88,73,84,81,41);
type
tF=file of integer;
var
f0,f1,f2:tF;{}
a1,a2:integer;{}
b:boolean;
c1,c2:integer;{}
begin
assign(f0,n0);assign(f1,n1);assign(f2,n2);
rewrite(f0);
for c1:=1 to 16 do write(f0,a[c1]);
close(f0);
repeat
reset(f0);rewrite(f1);rewrite(f2);
read(f0,a1,a2);b:=true;
repeat
if b then write(f1,a1) else write(f2,a1);
if a1>a2 then b:= not b;
a1:=a2;
read(f0,a2);
until EOF(f0);
if b then write(f1,a1) else write(f2,a1);
if a1>a2 then b:=not b;
if b then write(f1,a2) else write(f2,a2);
close(f0);close(f1);close(f2);
{}
writeln('control output before sort:');
reset(f0);reset(f1);reset(f2);
write(FileSize(f0):6,' ':3);while not EOF(f0)do begin read(f0,a1);write(a1:3)end;writeln;
write(FileSize(f1):6,' ':3);while not EOF(f1)do begin read(f1,a1);write(a1:3)end;writeln;
write(FileSize(f2):6,' ':3);while not EOF(f2)do begin read(f2,a1);write(a1:3)end;writeln;
c1:=FileSize(f1);c2:=FileSize(f2);
close(f0);close(f1);close(f2);
if(c1<>0)and(c2<>0)then
begin
rewrite(f0);reset(f1);reset(f2);
while(not EOF(f1))and(not EOF(f2))do
begin
c1:=-32768;c2:=-32768;
read(f1,a1);read(f2,a2);
while(c1<=a1)and(c2<=a2)and(not EOF(f1))and(not EOF(f2))do
if a1<=a2 then
begin
write(f0,a1);
c1:=a1;
read(f1,a1)
end
else
begin
write(f0,a2);
c2:=a2;
read(f2,a2)
end;
while(c1<=a1)and(not EOF(f1))do
begin
write(f0,a1);
c1:=a1;
read(f1,a1)
end;
while(c2<=a2)and(not EOF(f2))do
begin
write(f0,a2);
c2:=a2;
read(f2,a2)
end;
while not EOF(f1)do
begin
write(f0,a1);
read(f1,a1)
end;
while not EOF(f2)do
begin
write(f0,a2);
read(f2,a2)
end;
if a1<=a2 then write(f0,a1,a2)
else write(f0,a2,a1);
end;
close(f0);close(f1);close(f2);
reset(f0);reset(f1);reset(f2);
writeln('control output after sort');
write(FileSize(f0):6,' ':3);while not EOF(f0)do begin read(f0,a1);write(a1:3)end;writeln;
write(FileSize(f1):6,' ':3);while not EOF(f1)do begin read(f1,a1);write(a1:3)end;writeln;
write(FileSize(f2):6,' ':3);while not EOF(f2)do begin read(f2,a1);write(a1:3)end;writeln;
c1:=FileSize(f1);c2:=FileSize(f2);
close(f0);close(f1);close(f2);
end
until(c1=0)or(c2=0);
end.[/code]

Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа