Procedure OrdenarD(A:LNaturales); Var i,j:longint; aux:qword; intv:longword; // intervalo n:longword; Begin //intervalo inicial intv:=0; if length(A)>1 then // Debe ser mayor que 1 Begin n:=trunc(ln(length(A)-1)+2); intv:=trunc((1+exp(n-2))+0.5); End; While intv>0 do // Mientras intervalo > 0 Begin //algoritmo de inserciĆ³n, por intervalos for i:=intv to high(A) do Begin j:=i; aux:=A[i]; while ((j>=intv) and (auxA[j-intv])) do Begin A[j]:=A[j-intv]; j:=j-intv End; A[j]:=aux //A[j+inc]:=aux End; //nuevo intervalo n-=1; if n>0 then intv:=trunc((1+exp(n-2))+0.5) else intv:=0 End; End;