|
Sortare prin interclasare
Se considera vectorul a cu n componente numere intregi. Sa se sorteze crescator, utilizand sortarea prin interclasare.
program sort;
type vector=array[1..10] of integer;
var a:vector;
n,i:integer;
procedure sort(p,q:integer;var a:vector);
var m:integer;
begin
if a[p]>a[q] then
begin
m:=a[p];
a[p]:=a[q];
a[q]:=m
end
end;
procedure interc(p,q,m:integer;var a:vector);
var b: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
b[k]:=a[i];
i:=i+1;
k:=k+1
end
else begin
b[k]:=a[j];j:=j+1;k:=k+1
end;
if i<=m then
for j:=i to m do begin
b[k]:=a[j];
k:=k+1;
end
else
for i:=j to q do begin
b[k]:=a[j];
k:=k+1;
end;
k:=1;
for i:=p to q do begin
a[i]:=b[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;
divimp(p,m,a);
divimp(m+1,q,a);
interc(p.q.m.a);
end
end;
write('n= ');read(n);
for i:=1 to n do
begin
write('a[',i,']=');readln(a[i]);
end;
divimp(1,n,a);
for i:=1 to n do
writeln(a[i]);
end.