PDA

Ver la Versión Completa : Ordenación Quicksort


BEPAI
13-09-2015, 11:29:05
Poner la ordenación de forma descendente este algoritmo, o quizás mejor, elegir la más conveniente.


Globales>> iLo, iHi: Integer




PROCEDURE QUICKSORT(var A: array of Integer; iLo, iHi: Integer) ;

var
Lo, Hi, Pivot, T: Integer;

Begin

Lo := iLo;
Hi := iHi;
Pivot := A[(Lo + Hi) div 2];

REPEAT
while A[Lo] < Pivot do Inc(Lo) ;
while A[Hi] > Pivot do Dec(Hi) ;
if Lo <= Hi then
begin
T := A[Lo];
A[Lo] := A[Hi];
A[Hi] := T;
Inc(Lo) ;
Dec(Hi) ;
end;
UNTIL Lo > Hi;

if Hi > iLo then QuickSort(A, iLo, Hi) ;
if Lo < iHi then QuickSort(A, Lo, iHi) ;

end;


Usage:

Var

intArray : array of integer;

begin
SetLength(intArray,10) ;

//Add values to intArray
intArray[0] := 2007;
...
intArray[9] := 1973;

//sort
QuickSort(intArray, Low(intArray), High(intArray)) ;



Cómo hacer esto y si se puede mejorar.
Gracias.

Casimiro Notevi
13-09-2015, 19:03:56
¿Qué problema tienes?

ecfisa
13-09-2015, 20:48:23
Hola BEPAI.
Poner la ordenación de forma descendente este algoritmo...

...
while A[Lo] > Pivot do Inc(Lo);
while A[Hi] < Pivot do Dec(Hi);
...


Saludos :)

BEPAI
15-09-2015, 12:30:35
Gracias ecfisa,


PROCEDURE QUICKSORT(var A: array of Integer; iLo, iHi: Integer) ;

var
Lo, Hi, Pivot, T: Integer;

Begin

Lo := iLo;
Hi := iHi;
Pivot := A[(Lo + Hi) div 2];

REPEAT
while A[Lo] > Pivot do Inc(Lo) ;
while A[Hi] < Pivot do Dec(Hi) ;

if Lo <= Hi then
begin
T := A[Lo];
A[Lo] := A[Hi];
A[Hi] := T;
Inc(Lo) ;
Dec(Hi) ;
end;
UNTIL Lo > Hi;

if Hi > iLo then QuickSort(A, iLo, Hi) ;
if Lo < iHi then QuickSort(A, Lo, iHi) ;

end;


Casimiro Notevi
¿Qué problema tienes?


No entiendo como funciona.:mad:

ecfisa
15-09-2015, 13:09:04
Hola BEPAI.
...

No entiendo como funciona.:mad:

Te pongo unos enlaces que explican el funcionamiento:

QuickSort (https://es.wikipedia.org/wiki/Quicksort)
Sorting algorithms/Quicksort (http://rosettacode.org/wiki/Sorting_algorithms/Quicksort)

Vas a encontrar muchos mas en la web.

Saludos :)

BEPAI
18-09-2015, 13:58:22
qP:-)^\||/^\||/ gracias