Ir para conteúdo
Fórum Script Brasil
  • 0

Quicksort - Help Urgente


icoN

Pergunta

O pessoal, to tentando implementar o quicksort. Montei esse algoritmo aqui mas está dando um pequeno erro na hora de ordenar, alguns ele está deixando errado e tal.. Algm pode da uma mao?

Valeu! (Pus umas flags sinalizadoras e vi que ele não está entrando no segundo laço, mas n sei porque!)

void QSort (int vet[], int ini, int fim)

     {int i=ini;
      int f=fim;  
      int pivo = vet[ini];
      int esq=1;
      int aux;
      
if (fim  > ini)

{      
        printf ("Fim > Ini! Pivo vale %i\nO vetor é: \n", pivo);
        for (aux=ini; aux<fim+1; aux++)
            printf (" %i ",vet[aux]);
            getch();
        

        
           do    {
                   
                                    
                   
                       if (vet[f]<pivo)
                           { 
                             printf ("Pivo na esquerda. Trocando %i com %i\n Novo vetor é\n", vet[i], vet[f]);
                             esq=0;
                             aux=vet[f];
                             vet[f]=vet[i];
                             vet[i]=aux;
                             
                             i++;
                             for (aux=ini; aux<fim+1; aux++)
                                 printf (" %i ",vet[aux]);
                             getch();
                            }
                         else
                            { printf ("Sem troca! Decrementa fim!\n");
                             getch();
                             f--; }
                        
                    else      
                    if (esq=0)
                    
                     
                        if (vet[i]>=pivo)
                            { printf ("Pivo na direita. Trocando %i com %i \n Novo vetor é \n", vet[i], vet[f]);
                            
                              aux=vet[i];
                              vet[i]=vet[f];
                              vet[f]=aux;
                              f--;
                              esq=1;
                              for (aux=ini; aux<fim+1; aux++)
                                printf (" %i ",vet[aux]);
                            getch();
                              }
                         else 
                            { printf ("Sem troca! Incrementa ini!\n");
                              getch();
                              i++; }
                              
                             
                                      
               }  while (i < f);
               
               
          
               
               
           QSort (vet, ini, i-1);
           QSort (vet, i+1, fim);
   
   }   
   
  }   /*end da função */
Sério pessoal, to precisando muito de ajuda! Esse problema ai eu simplesmente não consigo ver a solução :/ Dei uma limpada no codigo, pra quem prefere ver sem flags e tal.
void QSort (int vet[], int ini, int fim)

{     int i=ini;
      int f=fim;  
      int pivo = vet[ini];
      int esq;
      int aux;
      
      esq=1;
     
      
if (fim  > ini)

{      
       

        
           while (i < f) 
           
             { 
               
               if (esq=1)  
                  {
                    if (vet[f]<pivo)
                        { aux=vet[f];
                          vet[f]=vet[i];
                          vet[i]=aux;
                          esq=100;
                          i=i+1;
                         }
                     else      
                        f=f-1;
                        }
                           
               else                 
                    {
                    
                    if (pivo<vet[i])
                       {  aux=vet[f];
                          vet[f]=vet[i];
                          vet[i]=aux;
                          esq=1;
                          f=f-1;
                       }
                   else 
                      i=i+1;
                      
                      }                            
                   
               }                     
                             
                                      
                 
               
               
          
               
               
           QSort (vet, ini, i-1);
           QSort (vet, i+1, fim);
   
   }   
   
  }

Valeu ai!

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

if (esq=1)

Não deveria ser if(esq==1) ?

Duas dicas, primeiro use getchar que é padrão ansi, depois tente compilar seus programans no gcc

com gcc -Wall -ansi -pedantic qsort.c -o qsort.exe (se estiver no Linux não precisa de .exe =) )

o compilador irá te informar de possiveis erros no seu código.

A linguagem permite if(esq=1), mas este é um valor sempre true e que altera a sua variável.

Link para o comentário
Compartilhar em outros sites

  • 0

Certo, vou dar uma olhada sim. Existe uma função QuickSort na linguagem C++ que realiza a ordenação pelo quicksort. Sabe qual a sintaxe dela? E qual a biblioteca? É para um trabalho de análise das diferentes implementações do algoritmo... Valeu ai!

Link para o comentário
Compartilhar em outros sites

  • 0

a funcao se chama qsort e é da stdlib.h

Ela possui o seguinte prototipo:

void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *))

base é o vetor que voce quer ordenar

nmemb é o numero de elementos no vetor

size é o sizeof do tipo do vetor

compar é uma funcao de comparacao que devolve 0 se forem iguais, < 0 se o primeiro é maior que o segundo e >0 caso contrario.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...