[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