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

ordenaçao quicksort


bash

Pergunta

estou com o problema na hora de ordenar por qsort de ordenacao está certa mas como estou usando alocação dinamica, a referencia não esta sendo passada corretamente, se alguém puder me ajudar ficarei grato, abaixo está po codigo.

obrigado

#include <stdio.h>
#include <stdlib.h>

void limpa_tela(void);
int le_tam_vetor(void);
long *aloca_vetor(int qtde);
void preenche_vetor(long *vetor, int qtde);
void copia_vetor(long *vetor1, long *vetor2, int qtde);
void mostra_vetor(long *vetor, int qtde);
void desaloca_vetor(long *vetor);
void QSort (long *vetor, int ini, int fim);


int main(void){
    int qtde,fim,i,ini=0;
    long *ordenado, *desordenado;         
    qtde = le_tam_vetor();
    fim=qtde;
    ordenado = aloca_vetor(qtde);
    desordenado = aloca_vetor(qtde);
    preenche_vetor(desordenado, qtde);
    printf("desordenado\n");
        mostra_vetor(desordenado, qtde);
       QSort(ordenado,ini,qtde);  
       mostra_vetor(ordenado,qtde);
       desaloca_vetor(ordenado);
       desaloca_vetor(desordenado);
       return 0;
}
void limpa_tela(void){
         system("cls");         
}
int le_tam_vetor(void){
        int tam;
        do{
             limpa_tela();
             printf("Informe o tamanho do vetor: ");        
             scanf("%d%*c", &tam);
             if(tam <=0 ){
                  printf("O tamanho do vetor deve ser maior do que zero!");
                  getchar();
           }
    }while(tam <=0);
        return tam;
}

long *aloca_vetor(int qtde){
         long *vetor;
         vetor = (long *)calloc(qtde, sizeof(long));         
         if(!vetor){
              limpa_tela();
            printf("Erro na alocação de memoria.");                        
            printf("Impossivel continuar a execucao.");                        
            exit(0);
         }
         return vetor;
}

void desaloca_vetor(long *vetor){
         free(vetor);
}

void preenche_vetor(long *vetor, int qtde){
         int cont;
         long valor;
         srand(time(NULL)); //inicializa a geracao randomica de numeros
         for(cont=0; cont<qtde; cont++){
            valor = rand(); //rand() gera o num. randomico
            vetor[cont] = valor;
     }
}

void mostra_vetor(long *vetor, int qtde){
         int cont;
         for(cont=0; cont<qtde; cont++)
            printf("%d\t", vetor[cont]);         
        getchar();
}

void QSort (long *vetor, int ini, int fim){
      int i=ini;
      int f=fim;  
      int pivo = vetor[ini];
      int esq;
      int aux;
      esq=1;
      if (fim  > ini){      
           while (i < f) { 
              if (esq==1) {
                    if (vetor[f]<pivo){ 
                          aux=vetor[f];
                          vetor[f]=vetor[i];
                          vetor[i]=aux;
                        //  esq=100;
                          i=i+1;
                    }
                     else      
                        f=f-1;
              }                         
              else{
                if (pivo<vetor[i]){
                    aux=vetor[f];
                    vetor[f]=vetor[i];
                    vetor[i]=aux;
                    esq=1;
                    f=f-1;
                }
                 else 
                   i=i+1;                    
              }                                              
           }                     
           QSort (vetor, ini, i-1);
           QSort (vetor, i+1, fim); 
      } 
}

Editado por Micheus
Incluída tag's CODE para melhorar a visualização. Utilize a identação também ;)
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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,1k
    • Posts
      651,9k
×
×
  • Criar Novo...