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