Hi all! I have written code of Merge Sort.It works, but if count of elements above 50000 - RunTime Error,exitcode=201. It's maybe because of using too much memory. How can I solve this problem?
I tried to use dynamic arrays but that didn't help me.
type vector=array[1..1000000] of Integer;
var a:vector;
procedure merge(l,r,x,y:Integer);
var i,j,k,s:Integer;
c:vector;
begin
i:=l;
j:=y;
k:=1;
while (l<=r) and (x<=y) do
begin
if a[l]<a[x] then
begin
c[k]:=a[l];
inc(l);
end else
begin
c[k]:=a[x];
inc(x);
end;
inc(k);
end;
if l<=r then
for s:=l to r do
begin
c[k]:=a[s];
inc(k);
end else
for s:=x to y do
begin
c[k]:=a[s];
inc(k);
end;
k:=1;
for s:=i to j do
begin
a[s]:=c[k];
inc(k);
end;
end;
procedure sort(const l,r:Integer);
var m:Integer;
begin
if l=r then Exit;
m:=(l+r) div 2;
sort(l,m);
sort(m+1,r);
merge(l,m,m+1,r);
end;
procedure create_rand_vect(var a:vector;const n:Integer);
var i:Integer;
begin
for i:=1 to n do a[i]:=Random(51)-25;
end;
procedure print_vector(const a:vector; const n:Integer);
var i:Integer;
begin
for i:=1 to n do Write(a[i],' ');
Writeln;
end;
var n:Integer;
begin
Write('n=');
Readln(n);
Randomize;
create_rand_vect(a,n);
Writeln('1:');
print_vector(a,n);
Writeln('2:');
sort(1,n);
print_vector(a,n);
Readln;
end.
P.S Sorry for my bad English, I'm from Ukraine...