Ajuda com Numeros aleatorios em C no algoritmo de QuickSort

6 respostas
L

To com um Programa para ordenação QuickSort

o programa ta funcionando.. mas na hora de gerar os numeros aleatorios ta dando erro quando eu faço um rand maior de 100

o main:
int main(int argc, char *argv[])
{
     int n; 
     srand(time(NULL));           
     cout<<"Quantos Elementos?\n";
     cin>>n;
     long A[n];
      system("cls");       
    cout<<"Antes da Ordenacao\n\n";
    for(int i=0;i<n;i++){
            A[i]= rand()%100 + 0;
            if(i==(n-1)){
                        
                    cout><<A[i];
                    }
            else{        
           
            cout<<A[i]><<" - ";        
                          }
            } 
  
  qs(A,0,n-1);
    
    cout<<"\nDepois da Ordenacao\n\n";
    for(int i=0;i<n;i++){
            
            if(i==(n-1)){
                        
                    cout><<A[i];
                    }
            else{        
           
            cout<<A[i]><<" - ";           
            }
            }
  cout<<"\n\n\n\n\n";
    system("PAUSE");
    return EXIT_SUCCESS;
}
o problema está nesse trecho
A[i]= rand()%100 + 0;

se coloco o numero 100 da CERTO

mas se coloco um numero maior que 148 já da erro

eu fiz teste com
A[i]= rand()%148 + 0;
e deu certo mas
A[i]= rand()%149 + 0;
já deu erro..

Como que eu faço para consertar?

abaixo o codigo inteiro:
#include <cstdlib>
#include <iostream>

using namespace std;

void qs (long *item, int left, int right)
{
   int i, j;
   char x, y;

   i = left; j = right;
   x = item[right];

   do {
      while(item[i]<x && i><right) i++;
      while(x><item[j] && j>left) j--;

      if(i<=j) {
         y = item[i];
         item[i] = item[j];
         item[j] = y;
         i++; j--;
      }
   } while(i<=j);


   if(left<j) qs(item, left, j);
   if(i><right) qs(item, i, right);
}


int main(int argc, char *argv[])
{
     int n; 
     srand(time(NULL));           
     cout><<"Quantos Elementos?\n";
     cin>>n;
     long A[n];
      system("cls");       
    cout<<"Antes da Ordenacao\n\n";
    for(int i=0;i<n;i++){
            A[i]= rand()%148 + 0; 
            if(i==(n-1)){
                        
                    cout><<A[i];
                    }
            else{        
           
            cout<<A[i]><<" - ";        
                          }
            } 
  
  qs(A,0,n-1);
    
    cout<<"\nDepois da Ordenacao\n\n";
    for(int i=0;i<n;i++){
            
            if(i==(n-1)){
                        
                    cout><<A[i];
                    }
            else{        
           
            cout<<A[i]><<" - ";           
            }
            }
  cout<<"\n\n\n\n\n";
    system("PAUSE");
    return EXIT_SUCCESS;
}

Obrigado a todos que me ajudarem... abs

6 Respostas

J

teu compílador te trás algum retorno de erro?

V

Dentro da sua função qs, você está usando tipos menores do que os declarados fora.

Se seu array A é de longs, trabalhe no seu quicksort com longs.
O char mesmo só vai de -127 até 128.

L

ViniGodoy:
Dentro da sua função qs, você está usando tipos menores do que os declarados fora.

Se seu array A é de longs, trabalhe no seu quicksort com longs.
O char mesmo só vai de -127 até 128.


Como que eu não tinei pra isso…
eu mudei o vetor de int A[n] para long A[n] e mudei a assinatura da função qs tb
mas lá dentro não mudei nada…

vou testar assim que chegar em casa…

Só uma duvida
o char vai de -127 até 127
e o unsigned char de 0 a 255

qual o tipo de variavel de caracteres que vai alem disso?

no mais…
obrigado Vinicius

V

Tem o wchar_t para Unicode, que é um short. Mas nada impede você de colocar um char num int.

L

Tipo mudar o tipo de char para int ou long?

Pelo que entendi só esse trecho do codigo

que está fazendo que os valores não sejam maiores correto?

V

Isso mesmo.

Criado 13 de maio de 2012
Ultima resposta 14 de mai. de 2012
Respostas 6
Participantes 3