[C con Clase] plantillas
Juan
jmicanovelles en gmail.com
Mie Jul 16 00:06:22 CEST 2008
Lo he hecho asi, levemente mas lenta que la otra implementaciòn:
template <typename T>
void quickSort2(T *array,T *fin, bool (*ptComparar)(T, T))
{
T* i, *f;
T pivote, temp;
if( array >= fin )
return;
// Establecemos los extremos temporales y el pivote.
int t,z,y;
z=(int)array;
y=(int)fin;
t=(y-z)/sizeof(T)/2;
i = array;
f = fin-1;
pivote = *(array+t);
do
{
// Buscamos el primer elemento de izquierda a derecha que sea mayor al pivote.
if(ptComparar)
{
while( ptComparar(*i , pivote )) i++;
// Buscamos el primer elemento de derecha a izquierda que sea menor al pivote.
while( ptComparar(pivote, *f )) f--;
}
else
{
while(*i<pivote)i++;
while(pivote<*f) f--;
}
if( i <= f )
{
// Intercambiamos los extremos.
temp=*i;
*i=*f;
*f=temp;
// Aumentamos los contadores.
i++;
f--;
}
} while (i < f);
// Una vez hecha la partición llamamos recursivamente al Quicksort.
quickSort2(array,++f,ptComparar);
quickSort2(i,fin,ptComparar);
}
Juan
Más información sobre la lista de distribución Cconclase