Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ordenación Quicksort (https://www.clubdelphi.com/foros/showthread.php?t=89020)

BEPAI 13-09-2015 11:29:05

Ordenación Quicksort
 
Poner la ordenación de forma descendente este algoritmo, o quizás mejor, elegir la más conveniente.


Código Delphi [-]
Globales>> iLo, iHi: Integer

Código Delphi [-]
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:
Código Delphi [-]
 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.
Cita:

Empezado por BEPAI (Mensaje 496628)
Poner la ordenación de forma descendente este algoritmo...

Código Delphi [-]
...
    while A[Lo] > Pivot do Inc(Lo);
    while A[Hi] < Pivot do Dec(Hi);
...

Saludos :)

BEPAI 15-09-2015 12:30:35

Gracias ecfisa,


Código Delphi [-]
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
Cita:

¿Qué problema tienes?
No entiendo como funciona.:mad:

ecfisa 15-09-2015 13:09:04

Hola BEPAI.
Cita:

Empezado por BEPAI (Mensaje 496722)
...

No entiendo como funciona.:mad:

Te pongo unos enlaces que explican el funcionamiento:Vas a encontrar muchos mas en la web.

Saludos :)

BEPAI 18-09-2015 13:58:22

qP:-)^\||/^\||/ gracias


La franja horaria es GMT +2. Ahora son las 08:23:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi