SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Ciudad Nocturna en Domingo 4 de Mayo de 2003, 18:59

Título: Re: Código del Quicksort
Publicado por: Ciudad Nocturna en Domingo 4 de Mayo de 2003, 18:59
Hola, tengo un problema con el código fuente de este algoritmo de busqueda, así que se alguien pudiera darme el código implementado en c++, pues me sería de gran utilidad. gracias.

Un saludo.
Título: Re: Código del Quicksort
Publicado por: Iluvatarm en Lunes 5 de Mayo de 2003, 14:51
Que problema tienes exactamente? a lo mejor te podemos ayudar

suerte!
Título: Re: Código del Quicksort
Publicado por: Ciudad Nocturna en Lunes 5 de Mayo de 2003, 22:04
Pues mira yo estoy intentando programar la función de busqueda quicksort, cuando ejecuto el programa donde la uso al llegar al punto donde debiera realizar el ordenado el programa casca completamente y deja de funcionar.

Te muestro el codigo que porgramado para que le heches un vistazo.

la llamada que utilizo es:
Quicksort (TFFichas,0,iNumFichas-1);

void Quicksort (TFichaAlumnos Libro[iMAX], int i, int d)

{

if (i>=d)

return;

         TFichaAlumnos Aux;
         int m=i;
         int n=d+1;

         long pivote = Libro.Codigo;

         while (TRUE)

            {
               do
                  {
                     m++;
                  }
               
               while (Libro[m].Codigo < pivote);
               
               do
                  {
                     n--;   
                  }
               
               while (Libro[n].Codigo > pivote);

               if (m >= n)

                  {
                     Aux = Libro[m];
                     Libro[m]= Libro[n];
                     Libro[n] = Aux;
                  }
            }
         
         Libro=Libro[n];
         Libro[n].Codigo =pivote;

         Quicksort (Libro,i,n-1);
         Quicksort (Libro,n+1,d);
      
}

Gracias, UN Saludo.

visita www.ciudadnocturna.tk (http://www.ciudadnocturna.tk)
Título: Re: Código del Quicksort
Publicado por: JuanK en Lunes 5 de Mayo de 2003, 22:19
Oye , tal vez te pueda ayudar pero necesito que me des más especificaciones del programa, porque no se de que consta el tipo de dato que has definido.

Seria buena idea publicar el codigo completo, para asi poderte ayudar mejor y mas facilmente.

Juank
Título: Re: Código del Quicksort
Publicado por: Ciudad Nocturna en Lunes 5 de Mayo de 2003, 22:58
Este es un pequeño programa que he hecho para probar esta función, porque es realidad la necesito para un programa un poco más amplio, pero este es código que he preparado para su prueba. Como comente en el post anterior, el programa al ejecutarse la toma de datos la realiza adecuadamente pero al llegar a ordenarlo casca totalmente.

Aui os muestro todo el código:

#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define iMAX 100
#define iNOM 50

enum Bool {FALSE, TRUE};

struct TFecha
   
   {
      int iDia, iMes, iYear;
   };

struct TDni

   {
      long iNif;
      char Letra;
   };

struct TNotas

   {
      int Mates;
      int Ingles;
      int Tecnologia;
      int Fisica;
      int Contabilidad;
      int Tog;
      int Metodologia;
      int So;
   };

struct TFichaAlumnos

   {
      TFecha fechanacimiento;
      char szNombre [iNOM];
      TDni DniAlum;
      TNotas NotaAlum;
      long Codigo;
   };


void Mostrar (TFichaAlumnos Libro [iMAX], int iNum);
void Leer (TFichaAlumnos Libro [iMAX], int * iNum);
void Quicksort (TFichaAlumnos Libro [iMAX], int i, int d);

void main ()

{

   TFichaAlumnos TFFichas [iMAX] ={0};
   int iNumFichas =0;
   int i=0;

   Leer (TFFichas,&iNumFichas);
   cout <<iNumFichas;
   Quicksort (TFFichas,0,iNumFichas-1);

   Mostrar (TFFichas,iNumFichas);

}


void Leer (TFichaAlumnos Libro [iMAX], int * iNum)

{

   char chOk='s';

   system ("cls");
   
   while (chOk != 'n')

      {
         system ("cls");
         cout <<"nnintro codigo: ";
         cin >> Libro[*iNum].Codigo;
         (*iNum)++;

         cout <<"nn¿Desea Introducir más fichas (s/n): ";
         cin >> chOk;

         if (chOk == 'S' || chOk == 'N')

            {
               chOk = tolower (chOk);
            }
      }
   cin.clear();

}

////////////////////////////////////////////////////////////////////

void Quicksort (TFichaAlumnos Libro [iMAX], int i, int d)

{

   if (i>=d)

      return;

         TFichaAlumnos Aux;
         int m=i;
         int n=d+1;

         long pivote = Libro.Codigo;

         while (TRUE)

            {
               do
                  {
                     m++;
                  }
               
               while (Libro[m].Codigo < pivote);
               
               do
                  {
                     n--;   
                  }
               
               while (Libro[n].Codigo > pivote);

               if (m >= n)

                  {
                     Aux = Libro[m];
                     Libro[m]= Libro[n];
                     Libro[n] = Aux;
                  }
            }
         
         Libro=Libro[n];
         Libro[n].Codigo =pivote;

         Quicksort (Libro,i,n-1);
         Quicksort (Libro,n+1,d);
      
}
//////////////////////////////////////////////////////////

void Mostrar (TFichaAlumnos Libro [iMAX], int iNum)

{

   int i=0;

   system ("cls");

   for (i=0; i != iNum; i++)

      {
         cout << Libro.Codigo <<"n";
   
      }

}

Gracias UN saludo.

visitar www.ciudadnocturna.tk (http://www.ciudadnocturna.tk)
Título: Código del Quicksort
Publicado por: Ciudad Nocturna en Viernes 16 de Mayo de 2003, 19:18
Ya encontré la soloción a mi problema, gracias a todos los que se interesaron.