domingo, 27 de março de 2011

Ordenação em C pelo método quicksort

#include<stdio.h>
int Pivode3 (int v[],int ini,int fim)
{
int meio;
meio=(ini+fim)/2;
if (v[ini]<v[fim] && v[ini]>v[meio] || v[ini]>v[fim] && v[ini]<v[meio]) return ini;
if (v[meio]<v[fim] && v[meio]>v[ini] || v[meio]>v[fim] && v[meio]<v[ini]) return meio;
return fim;
}
void quicksort (int v[],int ini,int fim)
{
int esq,dir,pivo,aux;
esq=ini;
dir=fim-1;
if ((fim-ini)<1) return;
if ((fim-ini)==1)
{
if(v[ini]>v[fim]){
aux=v[fim];
v[fim]=v[ini];
v[ini]=aux;}
return;
}
else
{
pivo=Pivode3(v,ini,fim);
if(v[fim]!=v[pivo]){
aux=v[fim];
v[fim]=v[pivo];
v[pivo]=aux;}
while(esq<dir){
if(v[esq]>v[fim]){
if(v[dir]<v[fim]){
aux=v[esq];
v[esq]=v[dir];
v[dir]=aux;
esq++;dir--;}
else{
dir--;}}
else{
esq++;}
}
quicksort(v,ini,esq);
quicksort(v,esq,fim);
}
}
int main (void)
{
int v[10]={9,0,8,1,7,2,6,3,5,4},i;
quicksort(v,0,9);
for(i=0;i<10;i++){
printf("%d\t",v[i]);}
return 0;
}

5 comentários:

  1. Muito obrigado LUCIANA !

    Está sendo muito útil e me ajudando bastante, aliás sempre soube do seu potencial e profissionalismo. Pessoas como você engrandecem a Terra. Parabéns !

    Evandro IST RJ

    ResponderExcluir
  2. Parabéns estava procurando um codigo que copila e aqui foi o unico que encontrei...

    Vc sabe onde encontro mais?

    Valeu...

    ResponderExcluir
    Respostas
    1. Obrigada. Mas este foi um código que utilizei em sala, então só caçando no google mesmo. Na época que procurei, encontrei vários em C++ e tive alguns problemas e tive que fazer o meu na marra...

      Excluir
  3. Parabéns Lucina, obrigado pelo codigo, me tirou algumas duvidas!
    Sucesso sempre!

    ResponderExcluir
  4. Oi, Luciana ! Se eu quiser botar um contador no programa para no final imprimir quantas trocas houveram, como ficaria ?

    ResponderExcluir