var i,j,n,total,k:longint;//integer;
a,b,c:array[1..100] of integer;
procedure msort(l,r:longint);
var
i,j,mid,k:longint;
begin
if (l=r) then exit;
mid:=(l+r) shr 1;
msort(l,mid); //让左右子序列有序
msort(mid+1,r);
for i:=l to r do
c[i]:=b[i];
i:=l;j:=mid+1;
for k:=l to r do
begin
if (i<=mid) and ((c[i]<=c[j]) or (j>r)) then
begin
b[k]:=c[i];
inc(i);
end
else
begin
b[k]:=c[j];
inc(total,mid-i+1); //统计核心 当前右元素与所有未输出的左元素构成逆序对
inc(j);
end;
end;
end;
begin
{读入数据}
Total:=0;
readln(n);
for i := 1 to n do read(b[i]);
readln;
msort(1,n);
for i := 1 to n do write(b[i], ' ');
writeln;
// writeln(total);
end.
本文介绍了使用递归快速排序算法处理整数数组,并计算数组中逆序对的数量。通过详细步骤和代码实现,阐述了排序过程及逆序对的统计方法,适用于计算机科学和算法课程的学习。
1万+

被折叠的 条评论
为什么被折叠?



