stack overflow
Opa , galera queria saber como corrigir o stack Overflow no meu quicksort
Chamada na main
Função:
a segunda chamada recursiva do quickSort (quickSort(vet,j+1,ultimo);) pelo que percebi que esta fazendo dar stack overflow, mais nao consigo pensar um jeito de corrigir , pois com um vetor menos que 5000 funciona nomalmente, porem com 5000 ou mais stack overflow.
Chamada na main
quickSort(case1Ordenation, 0, tam-1);
Função:
//Partition
void partition(int vet[], int primeiro, int ultimo, int *j) {
int up, down, temp, a;
a = vet[primeiro];
up = ultimo;
down = primeiro;
troc = 0, comp = 0;
while(down < up){
comp++;
while(vet[down] <= a && down < ultimo){
comp = comp +2;
down++;
}
while(vet[up] > a){
comp++;
up--;
}
if(down < up) {
comp ++;
temp = vet[down];
vet[down] = vet[up];
vet[up] = temp;
}
}
vet[primeiro] = vet[up];
vet[up] = a;
*j = up;
}
// Quicksort
void quickSort(int vet[], int primeiro, int ultimo){
int j;
if(primeiro >= ultimo)
return;
partition(vet,primeiro,ultimo,&j);
quickSort(vet,primeiro,j-1);
quickSort(vet,j+1,ultimo);
troc++;
}a segunda chamada recursiva do quickSort (quickSort(vet,j+1,ultimo);) pelo que percebi que esta fazendo dar stack overflow, mais nao consigo pensar um jeito de corrigir , pois com um vetor menos que 5000 funciona nomalmente, porem com 5000 ou mais stack overflow.
Autilio
Curtidas 0
Respostas
Autilio
22/10/2007
a quem interessar , a solucao foi implemtar outro quicksort
void swap(int *a, int *b) {
int t=*a; *a=*b; *b=t;
}
void quickSort(int vet[], int primeiro, int ultimo) {
int pivo, a, up, comp = 0, troc = 0;
if (ultimo > primeiro + 1) {
comp++;
pivo = vet[primeiro];
a = primeiro + 1;
up = ultimo;
while (a < up) {
comp++;
if (vet[a] <= pivo){
a++;
comp++;
}
else{
swap(&vet[a], &vet[--up]);
}
}
swap(&vet[--a], &vet[primeiro]);
quickSort(vet, primeiro, a);
quickSort(vet, up, ultimo);
troc++;
}
}
GOSTEI 0