[C con Clase] Recursividad

Joe Tend neojtr en hotmail.com
Sab Nov 21 00:21:04 CET 2009


Hola a todos, en la uni me pidieron un programa que utilize varios metodos de ordenamiento, ya hice varios pero el quicksort se cuelga y ni idea de el por que he probado cambiar varias funciones y la misma del proceso de quicksort pero sigue sin andar.. una manito no caeria mal, aca esta el codigo de la funcion y las funciones que ahi se usan... gracias por vuestra atencion :-)

struct pers
{
       unsigned short edad;
       char nomb[20];
       char apel[20];
};
/***********************************************/
void QuiNomb(pers vector[], short inicio, short fin)
{
       if(inicio<fin)
       {
       short pivote1 = procesonomb(vector,inicio,fin);
       QuiNomb(vector,inicio,pivote1-1);
       QuiNomb(vector,pivote1+1,fin);
       }
}

short procesonomb(pers vector[], short inic, short fini)
{
         pers persaux;
         short izq = inic; short der = fini;
         pers pivote2;
         copiar(pivote2,vector[inic]);
         while(izq < der)
         {
                while(menor(pivote2.nomb,vector[der].nomb)) der--;
                while((menor(vector[izq].nomb,pivote2.nomb))&&(izq<der)) izq++;
                if(izq<der)
                {
                       copiar(persaux,vector[der]);
                       copiar(vector[der],vector[izq]);
                       copiar(vector[izq],persaux);
                }
         }
         copiar(persaux,vector[inic]);
         copiar(vector[inic],vector[der]);
         copiar(vector[der],persaux);
         
         return der;
}

/*************************************************/
void copiar(pers &prim, pers &seg)
{
     strcpy(prim.nomb, seg.nomb);
     strcpy(prim.apel, seg.apel);
     prim.edad = seg.edad;
}
/*************************************************/
bool menor(char pa1[20],char pa2[20])
{
     short i;
     if(strlen(pa1)<=strlen(pa2))
     {
          for(i=0; i<strlen(pa1); i++)
          {
               if (pa1[i]<pa2[i]) return true;
               if (pa2[i]<pa1[i]) return false;
          } if(i==strlen(pa1)) return true;
     } else {
            for(i=0; i<strlen(pa2); i++)
            {
                 if (pa1[i]<pa2[i]) return true;
                 if (pa2[i]<pa1[i]) return false;
            } if(i==strlen(pa2)) return false;
       }
}  /*previamente me aseguro que las primeras letras sean mayusculas y las demás minusculas..*/

/*No he querido pasar a memoria dinámica porque de este modo es como se ha venido trabajando en el semestre.. sería mi última opción...*/
 		 	   		  
_________________________________________________________________
Invite your mail contacts to join your friends list with Windows Live Spaces. It's easy!
http://spaces.live.com/spacesapi.aspx?wx_action=create&wx_url=/friends.aspx&mkt=en-us
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20091120/045a5faf/attachment.html>


Más información sobre la lista de distribución Cconclase