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