procedure OrdenarA(var A: LNaturales; Izq,Der: int64) ; var auxIzq,auxDer: int64; Pivote,aux:qword; Begin auxIzq:=Izq; auxDer:=Der; Pivote := A[(auxIzq + auxDer) div 2]; Repeat while A[auxIzq] < Pivote do Inc(auxIzq); //recorrido por la izquierda while A[auxDer] > Pivote do Dec(auxDer); //recorrido por la derecha if auxIzq <= auxDer then begin //intercambio aux := A[auxIzq]; A[auxIzq] := A[auxDer]; A[auxDer] := aux; Inc(auxIzq); Dec(auxDer); end; until auxIzq > auxDer; if auxDer > Izq then OrdenarA(A,Izq,auxDer); if auxIzq < Der then OrdenarA(A,auxIzq,Der); End;