Divide et Impera: Interclasare vs Farey
PROGRAM Sortare_prin_Interclasare;
TYPE vector=array[1..100] of integer;
Var a:vector;
n,i:integer;
Procedure sort(p,q:integer;var a:vector);
var aux:integer;
Begin
if(a[p]>a[q]) then
begin
aux:=a[p];
a[p]:=a[q];
a[q]:=aux;
end;
End;
Procedure interclasare(p,q,m:integer;var a:vector);
var c:vector;
i,j,k:integer;
Begin
i:=p;
j:=m+1;
k:=1;
while((i<=m)and(j<=q)) do
if(a[i]<=a[j]) then
begin
c[k]:=a[i];
i:=i+1;
k:=k+1;
end
else
begin
c[k]:=a[j];
j:=j+1;
k:=k+1;
end;
if(i<=m) then
for j:=i to m do
begin
c[k]:=a[j];
k:=k+1;
end
else
for i:=j to q do
begin
c[k]:=a[i];
k:=k+1;
end;
k:=1;
for i:=p to q do
begin
a[i]:=c[k];
k:=k+1;
end;
End;
Procedure DivImp(p,q:integer;var a:vector);
var m:integer;
Begin
if(q-p)<=1 then sort(p,q,a)
else
begin
m:=(p+q) div 2;
writeln(p,' ',m,' ',q);
{if(m-p>1) then}
DivImp(p,m,a);
{if(m+1-q>1) then}
DivImp(m+1,q,a);
interclasare(p,q,m,a);
end;
End;
BEGIN
Readln(n);
for i:=1 to n do readln(a[i]);
DivImp(1,n,a);
Writeln;
for i:=1 to n do write(a[i],' ');
readln;
END.
PROGRAM Sortare_prin_Interclasare;
TYPE vector=array[1..10] of longint;
Var a:vector;
n,i:longint;
v_N,v_D:vector;
Procedure sort(p,q:integer;var a:vector);
var aux:integer;
Begin
if(a[p]>a[q]) then
begin
aux:=a[p];
a[p]:=a[q];
a[q]:=aux;
end;
End;
Procedure interclasare(p,q,m:integer;var a:vector);
var c:vector;
i,j,k:integer;
Begin
i:=p;
j:=m+1;
k:=1;
while((i<=m)and(j<=q)) do
if(a[i]<=a[j]) then
begin
c[k]:=a[i];
i:=i+1;
k:=k+1;
end
else
begin
c[k]:=a[j];
j:=j+1;
k:=k+1;
end;
if(i<=m) then
for j:=i to m do
begin
c[k]:=a[j];
k:=k+1;
end
else
for i:=j to q do
begin
c[k]:=a[i];
k:=k+1;
end;
k:=1;
for i:=p to q do
begin
a[i]:=c[k];
k:=k+1;
end;
End;
Procedure DivImp(p,q:integer;var a:vector;v_N:vector;v_D:vector);
var m,a1,a2,a3,a4:integer;
Begin
if
{(((v_N[3] div v_D[3])-(v_N[1] div v_D[1]))<=1)or}
(q-p<=1) then sort(p,q,a)
else
begin
p:=v_N[1] div v_D[1];
q:=v_N[3] div v_D[3];
v_N[2]:=v_N[1]+v_N[3];
v_D[2]:=v_D[1]+v_D[3];
m:=v_N[2] div v_D[2];
writeln(p,' ',m,' ',q);
{m:=(p+q) div 2;}
{b:=m;}
a1:=v_N[3];
a2:=v_D[3];
v_N[3]:=v_N[2];
v_D[3]:=v_D[2];
{q:=v_N[3] div v_D[3];}
if(m-p>1) then
DivImp(p,m,a,v_N,v_D);
v_N[3]:=a1;
v_D[3]:=a2;
{a:=m+1;}
a3:=v_N[1];
a4:=v_D[1];
v_N[1]:=v_N[2]+1;
v_D[1]:=v_D[2];
{p:=v_N[1] div v_D[1]+1;}
if(m+1-q>1) then
DivImp(m+1,q,a,v_N,v_D);
v_N[1]:=a3;
v_D[1]:=a4;
interclasare(p,q,m,a);
end;
End;
BEGIN
Readln(n);
for i:=1 to n do readln(a[i]);
v_N[1]:=1;
v_D[1]:=1;
v_N[3]:=n;
v_D[3]:=1;
v_N[2]:=v_N[1]+v_N[3];
v_D[2]:=v_D[1]+v_D[3];
DivImp(1,n,a,v_N,v_D);
Writeln;
for i:=1 to n do write(a[i],' ');
readln;
END.
PROGRAM Sortare_prin_Interclasare;
TYPE vector=array[1..100] of longint;
Var a:vector;
n,i:longint;
v_N,v_D:vector;
Procedure sort(p,q:integer;var a:vector);
var aux:integer;
Begin
if(a[p]>a[q]) then
begin
aux:=a[p];
a[p]:=a[q];
a[q]:=aux;
end;
End;
Procedure interclasare(p,q,m:integer;var a:vector);
var c:vector;
i,j,k:integer;
Begin
i:=p;
j:=m+1;
k:=1;
while((i<=m)and(j<=q)) do
if(a[i]<=a[j]) then
begin
c[k]:=a[i];
i:=i+1;
k:=k+1;
end
else
begin
c[k]:=a[j];
j:=j+1;
k:=k+1;
end;
if(i<=m) then
for j:=i to m do
begin
c[k]:=a[j];
k:=k+1;
end
else
for i:=j to q do
begin
c[k]:=a[i];
k:=k+1;
end;
k:=1;
for i:=p to q do
begin
a[i]:=c[k];
k:=k+1;
end;
End;
Procedure DivImp(p,q:integer;var a:vector;v_N:vector;v_D:vector);
var m,a1,a2,a3,a4:integer;
Begin
if
{(((v_N[3] div v_D[3])-(v_N[1] div v_D[1]))<=1)or}
(q-p<=1) then sort(p,q,a)
else
begin
p:=v_N[1] div v_D[1];
q:=v_N[3] div v_D[3];
v_N[2]:=v_N[1]+v_N[3];
v_D[2]:=v_D[1]+v_D[3];
m:=v_N[2] div v_D[2];
writeln(p,' ',m,' ',q);
{m:=(p+q) div 2;}
{b:=m;}
a1:=v_N[3];
a2:=v_D[3];
v_N[3]:=v_N[2];
v_D[3]:=v_D[2];
{q:=v_N[3] div v_D[3];}
if(m-p>1) then
DivImp(p,m,a,v_N,v_D);
v_N[3]:=a1;
v_D[3]:=a2;
{a:=m+1;}
a3:=v_N[1];
a4:=v_D[1];
v_N[1]:=v_N[2]+1;
v_D[1]:=v_D[2];
{p:=v_N[1] div v_D[1]+1;}
if(m+1-q>1) then
DivImp(m+1,q,a,v_N,v_D);
v_N[1]:=a3;
v_D[1]:=a4;
interclasare(p,q,m,a);
end;
End;
BEGIN
Readln(n);
for i:=1 to n do readln(a[i]);
v_N[1]:=1;
v_D[1]:=1;
v_N[3]:=n;
v_D[3]:=1;
v_N[2]:=v_N[1]+v_N[3];
v_D[2]:=v_D[1]+v_D[3];
DivImp(1,n,a,v_N,v_D);
Writeln;
for i:=1 to n do write(a[i],' ');
readln;
END.
PROGRAM Sortare_prin_Interclasare;
TYPE vector=array[1..100] of longint;
Var a:vector;
n,i:longint;
v_N,v_D:vector;
Procedure sort(p,q:integer;var a:vector);
var aux:integer;
Begin
if(a[p]>a[q]) then
begin
aux:=a[p];
a[p]:=a[q];
a[q]:=aux;
end;
End;
Procedure interclasare(p,q,m:integer;var a:vector);
var c:vector;
i,j,k:integer;
Begin
i:=p;
j:=m+1;
k:=1;
while((i<=m)and(j<=q)) do
if(a[i]<=a[j]) then
begin
c[k]:=a[i];
i:=i+1;
k:=k+1;
end
else
begin
c[k]:=a[j];
j:=j+1;
k:=k+1;
end;
if(i<=m) then
for j:=i to m do
begin
c[k]:=a[j];
k:=k+1;
end
else
for i:=j to q do
begin
c[k]:=a[i];
k:=k+1;
end;
k:=1;
for i:=p to q do
begin
a[i]:=c[k];
k:=k+1;
end;
End;
Procedure DivImp(p,q:integer;var a:vector;v_N:vector;v_D:vector);
var m,a1,a2,a3,a4,b1,b2,b3,b4,c1,c2,c3,c4:integer;
Begin
if(abs(q-p)<1) then sort(p,q,a)
else
begin
p:=trunc((v_N[1]/v_D[1])*n);
q:=trunc((v_N[3]/v_D[3])*n);
v_N[2]:=v_N[1]+v_N[3];
v_D[2]:=v_D[1]+v_D[3];
m:=trunc((v_N[2]/v_D[2])*n);
writeln(p,' ',m,' ',q);
{m:=(p+q) div 2;}
{b:=m;}
a1:=v_N[3];
a2:=v_D[3];
b1:=v_N[1];
b2:=v_D[1];
c1:=v_N[2];
c2:=v_D[2];
v_N[3]:=v_N[2];
v_D[3]:=v_D[2];
{q:=v_N[3] div v_D[3];}
if(m-p>=1) then
DivImp(p,m,a,v_N,v_D);
v_N[3]:=a1;
v_D[3]:=a2;
v_N[1]:=b1;
v_D[1]:=b2;
v_N[2]:=c1;
v_D[2]:=c2;
p:=trunc((v_N[1]/v_D[1])*n);
q:=trunc((v_N[3]/v_D[3])*n);
v_N[2]:=v_N[1]+v_N[3];
v_D[2]:=v_D[1]+v_D[3];
m:=trunc((v_N[2]/v_D[2])*n);
{a:=m+1;}
a3:=v_N[1];
a4:=v_D[1];
b3:=v_N[2];
b4:=v_D[2];
c1:=v_N[3];
c2:=v_D[3];
v_N[1]:=v_N[2]+1;
v_D[1]:=v_D[2];
{p:=v_N[1] div v_D[1]+1;}
if(m-q>=1) then
DivImp(m+1,q,a,v_N,v_D);
v_N[1]:=a3;
v_D[1]:=a4;
v_N[2]:=b3;
v_D[2]:=b4;
v_N[3]:=c1;
v_D[3]:=c2;
p:=trunc((v_N[1]/v_D[1])*n);
q:=trunc((v_N[3]/v_D[3])*n);
v_N[2]:=v_N[1]+v_N[3];
v_D[2]:=v_D[1]+v_D[3];
m:=trunc((v_N[2]/v_D[2])*n);
interclasare(p,q,m,a);
end;
End;
BEGIN
Readln(n);
for i:=1 to n do readln(a[i]);
v_N[1]:=0;
v_D[1]:=1;
v_N[3]:=1;
v_D[3]:=1;
v_N[2]:=v_N[1]+v_N[3];
v_D[2]:=v_D[1]+v_D[3];
DivImp(1,n,a,v_N,v_D);
Writeln;
for i:=1 to n do write(a[i],' ');
readln;
END.
TYPE vector=array[1..100] of integer;
Var a:vector;
n,i:integer;
Procedure sort(p,q:integer;var a:vector);
var aux:integer;
Begin
if(a[p]>a[q]) then
begin
aux:=a[p];
a[p]:=a[q];
a[q]:=aux;
end;
End;
Procedure interclasare(p,q,m:integer;var a:vector);
var c:vector;
i,j,k:integer;
Begin
i:=p;
j:=m+1;
k:=1;
while((i<=m)and(j<=q)) do
if(a[i]<=a[j]) then
begin
c[k]:=a[i];
i:=i+1;
k:=k+1;
end
else
begin
c[k]:=a[j];
j:=j+1;
k:=k+1;
end;
if(i<=m) then
for j:=i to m do
begin
c[k]:=a[j];
k:=k+1;
end
else
for i:=j to q do
begin
c[k]:=a[i];
k:=k+1;
end;
k:=1;
for i:=p to q do
begin
a[i]:=c[k];
k:=k+1;
end;
End;
Procedure DivImp(p,q:integer;var a:vector);
var m:integer;
Begin
if(q-p)<=1 then sort(p,q,a)
else
begin
m:=(p+q) div 2;
writeln(p,' ',m,' ',q);
{if(m-p>1) then}
DivImp(p,m,a);
{if(m+1-q>1) then}
DivImp(m+1,q,a);
interclasare(p,q,m,a);
end;
End;
BEGIN
Readln(n);
for i:=1 to n do readln(a[i]);
DivImp(1,n,a);
Writeln;
for i:=1 to n do write(a[i],' ');
readln;
END.
PROGRAM Sortare_prin_Interclasare;
TYPE vector=array[1..10] of longint;
Var a:vector;
n,i:longint;
v_N,v_D:vector;
Procedure sort(p,q:integer;var a:vector);
var aux:integer;
Begin
if(a[p]>a[q]) then
begin
aux:=a[p];
a[p]:=a[q];
a[q]:=aux;
end;
End;
Procedure interclasare(p,q,m:integer;var a:vector);
var c:vector;
i,j,k:integer;
Begin
i:=p;
j:=m+1;
k:=1;
while((i<=m)and(j<=q)) do
if(a[i]<=a[j]) then
begin
c[k]:=a[i];
i:=i+1;
k:=k+1;
end
else
begin
c[k]:=a[j];
j:=j+1;
k:=k+1;
end;
if(i<=m) then
for j:=i to m do
begin
c[k]:=a[j];
k:=k+1;
end
else
for i:=j to q do
begin
c[k]:=a[i];
k:=k+1;
end;
k:=1;
for i:=p to q do
begin
a[i]:=c[k];
k:=k+1;
end;
End;
Procedure DivImp(p,q:integer;var a:vector;v_N:vector;v_D:vector);
var m,a1,a2,a3,a4:integer;
Begin
if
{(((v_N[3] div v_D[3])-(v_N[1] div v_D[1]))<=1)or}
(q-p<=1) then sort(p,q,a)
else
begin
p:=v_N[1] div v_D[1];
q:=v_N[3] div v_D[3];
v_N[2]:=v_N[1]+v_N[3];
v_D[2]:=v_D[1]+v_D[3];
m:=v_N[2] div v_D[2];
writeln(p,' ',m,' ',q);
{m:=(p+q) div 2;}
{b:=m;}
a1:=v_N[3];
a2:=v_D[3];
v_N[3]:=v_N[2];
v_D[3]:=v_D[2];
{q:=v_N[3] div v_D[3];}
if(m-p>1) then
DivImp(p,m,a,v_N,v_D);
v_N[3]:=a1;
v_D[3]:=a2;
{a:=m+1;}
a3:=v_N[1];
a4:=v_D[1];
v_N[1]:=v_N[2]+1;
v_D[1]:=v_D[2];
{p:=v_N[1] div v_D[1]+1;}
if(m+1-q>1) then
DivImp(m+1,q,a,v_N,v_D);
v_N[1]:=a3;
v_D[1]:=a4;
interclasare(p,q,m,a);
end;
End;
BEGIN
Readln(n);
for i:=1 to n do readln(a[i]);
v_N[1]:=1;
v_D[1]:=1;
v_N[3]:=n;
v_D[3]:=1;
v_N[2]:=v_N[1]+v_N[3];
v_D[2]:=v_D[1]+v_D[3];
DivImp(1,n,a,v_N,v_D);
Writeln;
for i:=1 to n do write(a[i],' ');
readln;
END.
PROGRAM Sortare_prin_Interclasare;
TYPE vector=array[1..100] of longint;
Var a:vector;
n,i:longint;
v_N,v_D:vector;
Procedure sort(p,q:integer;var a:vector);
var aux:integer;
Begin
if(a[p]>a[q]) then
begin
aux:=a[p];
a[p]:=a[q];
a[q]:=aux;
end;
End;
Procedure interclasare(p,q,m:integer;var a:vector);
var c:vector;
i,j,k:integer;
Begin
i:=p;
j:=m+1;
k:=1;
while((i<=m)and(j<=q)) do
if(a[i]<=a[j]) then
begin
c[k]:=a[i];
i:=i+1;
k:=k+1;
end
else
begin
c[k]:=a[j];
j:=j+1;
k:=k+1;
end;
if(i<=m) then
for j:=i to m do
begin
c[k]:=a[j];
k:=k+1;
end
else
for i:=j to q do
begin
c[k]:=a[i];
k:=k+1;
end;
k:=1;
for i:=p to q do
begin
a[i]:=c[k];
k:=k+1;
end;
End;
Procedure DivImp(p,q:integer;var a:vector;v_N:vector;v_D:vector);
var m,a1,a2,a3,a4:integer;
Begin
if
{(((v_N[3] div v_D[3])-(v_N[1] div v_D[1]))<=1)or}
(q-p<=1) then sort(p,q,a)
else
begin
p:=v_N[1] div v_D[1];
q:=v_N[3] div v_D[3];
v_N[2]:=v_N[1]+v_N[3];
v_D[2]:=v_D[1]+v_D[3];
m:=v_N[2] div v_D[2];
writeln(p,' ',m,' ',q);
{m:=(p+q) div 2;}
{b:=m;}
a1:=v_N[3];
a2:=v_D[3];
v_N[3]:=v_N[2];
v_D[3]:=v_D[2];
{q:=v_N[3] div v_D[3];}
if(m-p>1) then
DivImp(p,m,a,v_N,v_D);
v_N[3]:=a1;
v_D[3]:=a2;
{a:=m+1;}
a3:=v_N[1];
a4:=v_D[1];
v_N[1]:=v_N[2]+1;
v_D[1]:=v_D[2];
{p:=v_N[1] div v_D[1]+1;}
if(m+1-q>1) then
DivImp(m+1,q,a,v_N,v_D);
v_N[1]:=a3;
v_D[1]:=a4;
interclasare(p,q,m,a);
end;
End;
BEGIN
Readln(n);
for i:=1 to n do readln(a[i]);
v_N[1]:=1;
v_D[1]:=1;
v_N[3]:=n;
v_D[3]:=1;
v_N[2]:=v_N[1]+v_N[3];
v_D[2]:=v_D[1]+v_D[3];
DivImp(1,n,a,v_N,v_D);
Writeln;
for i:=1 to n do write(a[i],' ');
readln;
END.
PROGRAM Sortare_prin_Interclasare;
TYPE vector=array[1..100] of longint;
Var a:vector;
n,i:longint;
v_N,v_D:vector;
Procedure sort(p,q:integer;var a:vector);
var aux:integer;
Begin
if(a[p]>a[q]) then
begin
aux:=a[p];
a[p]:=a[q];
a[q]:=aux;
end;
End;
Procedure interclasare(p,q,m:integer;var a:vector);
var c:vector;
i,j,k:integer;
Begin
i:=p;
j:=m+1;
k:=1;
while((i<=m)and(j<=q)) do
if(a[i]<=a[j]) then
begin
c[k]:=a[i];
i:=i+1;
k:=k+1;
end
else
begin
c[k]:=a[j];
j:=j+1;
k:=k+1;
end;
if(i<=m) then
for j:=i to m do
begin
c[k]:=a[j];
k:=k+1;
end
else
for i:=j to q do
begin
c[k]:=a[i];
k:=k+1;
end;
k:=1;
for i:=p to q do
begin
a[i]:=c[k];
k:=k+1;
end;
End;
Procedure DivImp(p,q:integer;var a:vector;v_N:vector;v_D:vector);
var m,a1,a2,a3,a4,b1,b2,b3,b4,c1,c2,c3,c4:integer;
Begin
if(abs(q-p)<1) then sort(p,q,a)
else
begin
p:=trunc((v_N[1]/v_D[1])*n);
q:=trunc((v_N[3]/v_D[3])*n);
v_N[2]:=v_N[1]+v_N[3];
v_D[2]:=v_D[1]+v_D[3];
m:=trunc((v_N[2]/v_D[2])*n);
writeln(p,' ',m,' ',q);
{m:=(p+q) div 2;}
{b:=m;}
a1:=v_N[3];
a2:=v_D[3];
b1:=v_N[1];
b2:=v_D[1];
c1:=v_N[2];
c2:=v_D[2];
v_N[3]:=v_N[2];
v_D[3]:=v_D[2];
{q:=v_N[3] div v_D[3];}
if(m-p>=1) then
DivImp(p,m,a,v_N,v_D);
v_N[3]:=a1;
v_D[3]:=a2;
v_N[1]:=b1;
v_D[1]:=b2;
v_N[2]:=c1;
v_D[2]:=c2;
p:=trunc((v_N[1]/v_D[1])*n);
q:=trunc((v_N[3]/v_D[3])*n);
v_N[2]:=v_N[1]+v_N[3];
v_D[2]:=v_D[1]+v_D[3];
m:=trunc((v_N[2]/v_D[2])*n);
{a:=m+1;}
a3:=v_N[1];
a4:=v_D[1];
b3:=v_N[2];
b4:=v_D[2];
c1:=v_N[3];
c2:=v_D[3];
v_N[1]:=v_N[2]+1;
v_D[1]:=v_D[2];
{p:=v_N[1] div v_D[1]+1;}
if(m-q>=1) then
DivImp(m+1,q,a,v_N,v_D);
v_N[1]:=a3;
v_D[1]:=a4;
v_N[2]:=b3;
v_D[2]:=b4;
v_N[3]:=c1;
v_D[3]:=c2;
p:=trunc((v_N[1]/v_D[1])*n);
q:=trunc((v_N[3]/v_D[3])*n);
v_N[2]:=v_N[1]+v_N[3];
v_D[2]:=v_D[1]+v_D[3];
m:=trunc((v_N[2]/v_D[2])*n);
interclasare(p,q,m,a);
end;
End;
BEGIN
Readln(n);
for i:=1 to n do readln(a[i]);
v_N[1]:=0;
v_D[1]:=1;
v_N[3]:=1;
v_D[3]:=1;
v_N[2]:=v_N[1]+v_N[3];
v_D[2]:=v_D[1]+v_D[3];
DivImp(1,n,a,v_N,v_D);
Writeln;
for i:=1 to n do write(a[i],' ');
readln;
END.
Comentarii
Trimiteți un comentariu