Duvida sobre o método QuickSort!!
Pessoal, tenho esse código abaixo, mas tenho algumas dúvidas com relação a ele, gostaria de saber se vocês pudessem me esclarecer algumas dúvidas que tenho, segue abaixo:
Após a primeira partição do vetor, como ficarão as duas chamadas dentro da função quicksort()?
Quantas chamadas ao método quicksort() ocorrerão?
Eu também reparei que para alguns casos, o o quicksort teve o tempo zerado, gostaria de saber o porquê? Pelo fato dele ser mais rápido que a maioria dos outros algoritmos?
Agradeço quem me ajudar!!
Obrigada!
#include<stdio.h>
#include<time.h>
#define MAX 10
void aleatorio();
void exibir();
void quicksort(int e,int d);
int a[MAX];
main(){
aleatorio();
printf("\\nVetor gerado\\n");
exibir();
system("pause");
quicksort(0,MAX-1);
printf("\\n\\nVetor ordenado\\n");
exibir();
}
void exibir(){
int i;
for(i=0;i<MAX;i++)
printf("a[%d]=%d\\n",i,a[i]);
}
void aleatorio(){
int i;
srand(time(NULL));
for(i=0;i<MAX;i++)
a[i]=rand()%MAX;
}
void quicksort(int e,int d){
int i;
if(d>e){
i=particao(e,d); /* Particionando o vetor */
quicksort(e,i-1);
quicksort(i+1,d);
}
}
int particao(int e,int d){
int v,i,j,t;
v=a[d];
i=e-1;
j=d;
do{
do{
i=i+1; /* Procura o maior*/
}while ((a[i]<v) && (i<d));
do{
j=j-1; /* Procura o menor*/
} while ((a[j]>v) && (j>0));
t=a[i];
a[i]=a[j];
a[j]=t;
} while (j > i);
// colocando o pivo a[d] em seu lugar
a[j]=a[i];
a[i]=a[d];
a[d]=t;
return i;
}
Após a primeira partição do vetor, como ficarão as duas chamadas dentro da função quicksort()?
Quantas chamadas ao método quicksort() ocorrerão?
Eu também reparei que para alguns casos, o o quicksort teve o tempo zerado, gostaria de saber o porquê? Pelo fato dele ser mais rápido que a maioria dos outros algoritmos?
Agradeço quem me ajudar!!
Obrigada!
Viviane Francelino
Curtidas 0