Hej! Muszę zmodyfikować program mergesort tak, aby zliczał liczbę inwersji, ktoś pomoże?
program mergesort;
const
MAX=100;
type
tablica=array[1..MAX]of integer;
procedure Merge(var A:tablica; p: byte; q:byte; r:byte);
var
i,j,k :byte;
L:tablica;
Pt:tablica;
begin
for i:=p to q do L[i-p+1]:=A[i];
L[q-p+2]:=1000;
for i:=q+1 to r do Pt[i-q]:=A[i];
Pt[r-q+1]:=1000;
i:=1;
j:=1;
for k:=p to r do
begin
if L[i]<Pt[j] then
begin
A[k]:=L[i];
i:=i+1;
end
else
begin
A[k]:=Pt[j];
j:=j+1;
end;
end;
end;
procedure Merge_Sort(var A: tablica; p: byte; r: byte);
var
q: integer;
begin
if p<r then
begin
q:=(p+r) div 2;
Merge_Sort(A,p,q);
Merge_Sort(A,q+1,r);
Merge(A,p,q,r);
end;
end;
var
p: text;
n,i: byte;
a: tablica;
begin
assign(p,'in');
reset(p);
n:=0;
while not eof(p) do
begin
n:=n+1;
readln(p,a[n]);
end;
close(p);
for i:=1 to n do write(a[i], ' ');
writeln;
Merge_Sort(a,1,n);
for i:=1 to n do write(A[i], ' ');
writeln;
end.