Duvida sobre o método QuickSort!!

30/10/2016

0

C# C

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:

#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

Viviane Francelino

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar