1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Erro de passagem de parâmetros em C

''' [Error] invalid conversion from 'int' to 'int' [-fpermissive] initializing argument 3 of 'void quickSort(int, int, int)' [-fpermissive]

Olá amigos, ainda não tenho muita pratica para fazer chamada de funções e não estou conseguindo entender como deve ser feita a passagem de parâmetros na função QuickSort, se puderem me ajudar ficarei grato. Abaixo segue o programa:

Obs: Qualquer dica de melhorias no programa é bem vinda".

// Prototipos
int menu(void);

void ordenacaoVetor(int *v);
void ins_direta(int *v, int tam);   //Inserção Direta
void ins_bolha(int *v, int tam);   //Inserção Bolha
void sel_direta(int*v, int tam);  //Seleção Direta
void shakeSort(int*v, int tam);  //ShakeSort
void quickSort(int e, int d, int *vet);
int particao(int e, int d, int *a);

//Principal  
int main()
{
    int opc = 0,vet[TAM],i=0,x,y;

    do
     {
         system("cls");

        printf("\n Ordenando seu Array\n");

        for(i=0;i <TAM; i++)
        {        
            printf(" \n Digite o %d valor do array: \t",i+1);
            scanf("%d",&vet[i]);

        }

         printf("\n\n-----------------------\n");
         printf("   0 - Exit             \n");
         printf("   1 - Ordenacao direta \n");
         printf("   2 - Ordenacao bolha  \n");
         printf("   3 - Selecao Direta   \n");
         printf("   4 - SHAKESORT        \n");
         printf("   5 - QuickSort        \n");
         printf("-----------------------\n\n");
         printf("Digite sua opcao: ");
         scanf("%d", &opc);
         printf("\n\n");

        switch(opc)
        {
            case 0: 
                system("cls");
                printf("Ate logo...exit");    
            case 1: ins_direta(vet, TAM);
                    break;
            case 2: ins_bolha(&vet[0], TAM);
                    break;
            case 3: sel_direta(vet, TAM);
                    break;
            case 4: shakeSort(vet, TAM);
                    break;
            case 5: quickSort(vet, x, y);
                    break;

            default: printf("\nOpcao invalida\n");
                    break;
            }

           if(opc!=0)
        {
               ordenacaoVetor(vet);
        }

    }while(opc != 0);

}
/*Preencheendo vetor
void preencheVetor(int *v){
     int i;
     for(i = 0; i < TAM; i++){
        printf(" %d:",i);
        scanf("%d", &v[i - 1]);
    }
    printf("\n");
} */

// Vetor ORDENADO
void ordenacaoVetor(int *v){
    int i=0;
    for(i = 0; i < TAM; i++){

        printf("\nValor ordenado: %d" , v[i]);
    }         
    printf("\n\n");
    system("pause");   
}


//Ordenação tipo DIRETA
void ins_direta(int *v, int tam)
{
    int aux,i,j;
    for(i = 1; i < tam; i++)
    {
        aux = v[i];
        j = i - 1;
        while ((j >= 0) && (aux < v[j]))
        {
            v[j + 1] = v[j];
            j--;
        }
        v[j + 1] = aux;
    }
}

//Ordenação tipo BOLHA
void ins_bolha(int *v, int tam){
     int aux, troca, i;
     int j = tam - 1;

     do{
         troca = 0;
         for(i = 0; i < j; i++)
               if(v[i] > v[i + 1]){
                   aux = v[i];
                   v[i] = v[i + 1];
                   v[i + 1] = aux;
                   troca = 1;
               }
         j--;
     }while(troca);
}


//Ordenação Seleção Direta
void sel_direta(int*v, int tam)
{
     int i,j,menor,posmenor;

         for(i=0;i<tam;i++)
         {
             menor=v[i];posmenor=i;
             for(j=i+1;j<tam;j++)
                 if(v[j]<menor)
                 {             
                     menor=v[j];
                     posmenor=j;
                 }
         v[posmenor]=v[i];
         v[i]=menor;
         }
}

//Ordenação SHAKESORT
void shakeSort(int*v, int tam)
{
     int j,k,l,r,aux;

     l=1;
     r= k=tam-1;
     do{
            for(j=r;j>=l;j--)
                if(v[j-1]>v[j]){
                      aux = v[j-1];
                      v[j-1] =  v[j];
                      v[j] = aux;
                      k = j; 
        }
     l = k+1;

     for(j=l;j<=r;j++)
         if(v[j-1]>v[j])
         {
                        aux =  v[j-1];
                        v[j-1] = v[j];
                        v[j]= aux;
                        k=j;
                        }
                        r=k-1;

         }while(l<=r);

}



//Ordenação tipo QUICKSORT
void quickSort(int e, int d, int *vet){
    int i;

    if(d > e){
        i = particao(e, d, vet);
        quickSort(e, i - 1, vet);
        quickSort(i + 1, d, vet);
    }
}


//Função Particao
int particao(int e, int d, int *a){
    int v, i, j, t;

    v = a[d];
    i = e - 1;
    j = d;

    do{
       do{
           i = i + 1; //esquerda
       }while((a[i] < v) && (i < d));

       do{
           j = j - 1; //direita
       }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;
}
  • Se sua dúvida é em C, não use a tag de C#, que é uma linguagem completamente diferente.

    ViniGodoy   18 de abr de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags c estrutura-de-dados ou faça a sua própria pergunta.