Exercices (pc2)
Corrigé
for i:= 1 to N do begin inv[a[i]]:=0; for j:= i+1 to N do if a[i]>a[j] then inv[a[i]]:= inv[a[i]]+1; end;
for i := 1 to N do {placer i}
begin
k := i - inv[i]; {k = place de i}
for j := i downto k+1 do
a[j] := a[j-1]; {d\'ecaler vers la droite}
a[k] := i
end;for i:=N downto 1 do
begin
k:=inv[i];
j:=N;
while (k<>0) and (a[j]<>0) do begin
{on recule de inv[i] places vides}
j:=j-1;
if a[j]=0 then k:=k-1;
end;
a[j]:=i
end;for i:= N-1 downto 1 do for j:= i+1 to N do if inv[a[j]>=i then begin t:=a[j]; a[j]:=a[j-1]; a[j-1]:=t end;