Procedure Ordenar(A:LNaturales); Var i,j:longword; aux:qword; intv:longword; //intervalo IniLista:Boolean; Begin intv:=length(A) div 2; //intervalo inicial While intv>0 do // Mientras intervalo >0 Begin //algoritmo de inserciĆ³n, por intervalos for i:=intv to high(A) do // Desde el intervalo hasta el final Begin j:=i-intv; aux:=A[i]; IniLista:=false; while (not IniLista) and (aux=intv then j:=j-intv else IniLista:=true End; if IniLista then A[j]:=aux else A[j+intv]:=aux End; //nuevo intervalo intv:=intv div 2 End; End;