Mergesort - zliczanie inwersji

0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1