Ajuda com Numeros aleatorios em C no algoritmo de QuickSort

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:[code]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&gt;&lt;&lt;A[i];
                }
        else{        
       
        cout&lt;&lt;A[i]&gt;&lt;&lt;&quot; - &quot;;        
                      }
        } 

qs(A,0,n-1);

cout&lt;&lt;&quot;\nDepois da Ordenacao\n\n&quot;;
for(int i=0;i&lt;n;i++){
        
        if(i==(n-1)){
                    
                cout&gt;&lt;&lt;A[i];
                }
        else{        
       
        cout&lt;&lt;A[i]&gt;&lt;&lt;&quot; - &quot;;           
        }
        }

cout<<"\n\n\n\n\n";
system("PAUSE");
return EXIT_SUCCESS;
}
[/code]

o problema está nesse trecho

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:

[code]#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&lt;=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&gt;&lt;&lt;A[i];
                }
        else{        
       
        cout&lt;&lt;A[i]&gt;&lt;&lt;&quot; - &quot;;        
                      }
        } 

qs(A,0,n-1);

cout&lt;&lt;&quot;\nDepois da Ordenacao\n\n&quot;;
for(int i=0;i&lt;n;i++){
        
        if(i==(n-1)){
                    
                cout&gt;&lt;&lt;A[i];
                }
        else{        
       
        cout&lt;&lt;A[i]&gt;&lt;&lt;&quot; - &quot;;           
        }
        }

cout<<"\n\n\n\n\n";
system("PAUSE");
return EXIT_SUCCESS;
}
[/code]

Obrigado a todos que me ajudarem… abs

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

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.

[quote=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.
[/quote]
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

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

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?

Isso mesmo.