ayuda para generar un arreglo con un millon de numeros

Dudas e ideas sobre los distintos e infinitos (:-)) algoritmos existentes.
Responder
Mensaje
Autor
david22r
Mensajes: 1
Registrado: 22/02/2014 8:44 pm
Ubicación: Honduras

ayuda para generar un arreglo con un millon de numeros

#1 Mensaje por david22r » 22/02/2014 9:03 pm

hola a todos, si me pueden ayudar tengo este programa que ordena un arreglo, n puede ser 10, 100, 1000, 10000, 100000, 1000000, cuando n es 10, 100, 1000, y hasta 10,000 el programa funciona bien y hace lo suyo, pero cuando doy el valor de n 100,000, el random solo me genera hasta un poco mas de 27,000 numero, cabe decir que es un arreglo donde no se repitan los numeros! gracias de antemano

Código: Seleccionar todo

#include <time.h> 
#include <stdio.h> 
#include <dos.h> 
#include<cstdlib>
#include<ctime>
#include <iostream>
using namespace std;

int getMilisegundos(clock_t c){
    int tiempo=0;
    tiempo = (int)((c/(double)CLOCKS_PER_SEC)*1000) ;
	return tiempo;
}

bool checkrep(int n, int num[], int cant){
    for(int i=0; i<cant; i++)
        if(n == num[i])
            return true;
    return false;
}

int main(){
	int cant;
	cout << "Ingrese N: "; // n puede ser 10, 100, 1000, 10000, 100000, 1000000
	cin >> cant;
		
	int ax = 0;
	int n, num [cant];
	int arreglo[cant];
	srand(time(NULL));
				
    for(int i=0; i<cant; i++)
    {
        do
            n = 1 + rand() % cant;
        while(checkrep(n, num, cant));
        num[i] = n;
    }
    cout << endl;
    
    for (int  y = 0; y < cant; y++) 
		arreglo[y] = num[y];
		
    int t1 = 0;
	int t2  = 0;
	int tiempo = 0;       
 	
	t1= clock(); 
	 		
 	for (int  i = 0; i < cant - 1; i++)
		for (int j = i + 1; j < cant; j++){
			if(arreglo[i] > arreglo[j]){
				ax = arreglo[i];
				arreglo[i] = arreglo[j];
				arreglo[j] = ax;
			}
		}	
 
 	t2=clock();
 
 	//cout << endl << "Arreglo ordenado:" << endl;
	for (int i = 0; i < cant; i++)
		cout << i + 1 << " numero: " << arreglo[i] << endl;
		
 	tiempo=getMilisegundos(t2-t1);
 	
	 //printf("\n Tiempo  de ejecucion = [ %d ] ", tiempo);
 	cout << endl << "Tiempo de ejecucion: " << tiempo;
	//cout << endl << "Inicio: " << t1;
 	//cout << endl << "Fin: " << t2 << endl;  
 	
	
 	return 0;
}
:?:

NOIS
Mensajes: 4
Registrado: 17/11/2014 12:08 pm
Ubicación: Madrid

#2 Mensaje por NOIS » 17/11/2014 12:12 pm

El problema es que el arreglo que utilizas es un int, y este no tiene tanta capazidad para almacenar memoria, lo que tienes que usar es un long int el cual crea una variable que reserva una mayor cantdad de memoria.

Espero que te sea de ayuda.

Saludos![/b]
NOISe7

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados