Cita de: BeFree en 19 Junio 2013, 19:33 PM
Hola, tengo que hacer un algoritmo que ordene N números naturales generados en forma aleatoria. Tiene que ejecutarse para 1000, 10000 y 100000. Escribí un código y al ejecutarlo lo hace sin problemas para 1000 y 10000, pero para 100000 no me muestra el resultado, y no puedo hallar el error.
Como indicó lapras, no hay error sino "lentitud" en el proceso, tanto de generación como en el de ordenación, más en este último.
Para que veas lo que pasa he incluido un par de printf y así compruebas que incluso en el caso de 100000 está el programa "trabajando". Te lo dejo con MAX=100 porque con los printf y la limpieza de pantalla, el proceso se ralentiza enormemente:
Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
/*Declaración de variables globales*/
unsigned long int MAX=100;
/*Generar datos*/
void CagarDatos(unsigned long int v[], unsigned long int N)
{
unsigned long int i,j;
int duplicado;
unsigned long int num;
for(i=0; i<N; i++)
{
num=1+rand()%N;
duplicado=0;
printf("Generando: %d",i+1);
system("cls");
for(j=0; j<=i; j++)
{
if(num==v[j])
{
duplicado=1;
break;
}
}
if(duplicado==1)
i--;
else
v[i]=num;
}
}
/*Ordenar Datos de menor a mayor mediante método burbuja*/
void OrdenarDatos(unsigned long int v[], unsigned long int N)
{
unsigned long int i,j;
unsigned long int buffer;
for(i=0; i<N-1; i++)
{
for(j=i+1; j<N; j++)
{
if(v[i]>v[j])
{
printf("Ordenando: %d",i+1);
system("cls");
buffer=v[j];
v[j]=v[i];
v[i]=buffer;
}
}
}
}
/*Muestra los datos cargados*/
void MostrarDatos(unsigned long int v[], unsigned long int N)
{
unsigned long int i;
printf("\n============================================");
printf("\nNúmeros cargados:\n ");
for(i=0; i<N; i++)
printf("-%ld", v);
}
/*Principal*/
int main()
{
unsigned long int ordenar[MAX];
time_t inicio, fin;
srand(time(NULL));
CagarDatos(ordenar, MAX);
inicio=time(NULL);
OrdenarDatos(ordenar, MAX);
MostrarDatos(ordenar, MAX);
/*Finalización*/
printf("\n============================================");
printf("\nLa cantidad de datos ordenados es: %ld", MAX);
fin=time(NULL);
printf("\nEl programa ha tardado: %.f segundos", difftime(fin,inicio));
printf("\n=========================================\n\n");
return 0;
}
Saluditos!