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

Ordenação de dados


Marina_DC

Pergunta

Boa tarde, gostaria de saber se alguém pode me ajudar a resolver um problema, estou fazendo um trabalho da faculdade em linguagem C que precisa receber 10 letras e depois apresentar um menu onde a pessoa escolhe qual tipo de ordenação vai querer utilizar para ordenar essas letras, eu fiz o programa todo, com a funções, não sei se está certo, ele tá compilando certinho mas na execução, recebe os dados e apresenta o menu, mas após a escolha do método de ordenação ele encerra. Ahh sim, os métodos solicitados são BublleSort, Inserção Direta, Seleção Direta e QuickSort, esses modelos o professor já forneceu o algoritmo e só precisei fazer o código, mas provavelmente tem erros, enfim.

Já tentei mudar algumas coisas mas continua na mesma, será que alguém poderia me explicar o que pode ser? Aqui vai o código:

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

void bubble(int conta, char* Letra);
void select(int tamanho, char* Letra);
void insert(int conta, char* Letra);
void quicksort (int conta, char* Letra);

int main (void)
{
    char Letra[9];
    int Cont, Opcao;
    
    printf("\n\n ------------------- PROGRAMA DE ORDENACAO ------------------\n\n");
    
    for (Cont=0; Cont<=9; Cont++)
    {
        printf("Insira uma letra: ");
        scanf("%s", &Letra[Cont]);
    }
    
    printf("\n\n -------------------- LISTA não ORDENADA --------------------\n\n");
    
    for (Cont=0; Cont<=9; Cont++)
    {
        printf("Letra: %c\n", Letra[Cont]);
    }
    
    printf("\n\n ------------------------------------------------------------\n\n");
    
    do
    {
        printf("Escolha um metodo de ordenacao:\n");
        printf("\nBublleSort 1");
        printf("\nSelecao Direta 2");
        printf("\nInsercao Direta 3");
        printf("\nQuickSort 4");
        printf("\n\nEntre com a opcao: ");
        scanf("%i", Opcao);
    }
    while(Opcao < 5);
     
    if(Opcao==1)
    {
        printf("---------------------- LISTA ORDENADA ----------------------\n\n");
        bubble(9, Letra);  
        printf("%s\n", Letra);
    }
    
    if(Opcao==2)
    {
        printf("---------------------- LISTA ORDENADA ----------------------\n\n");
        select(9, Letra);  
        printf("%s\n", Letra);
    }

    if(Opcao==3)
    {
        printf("---------------------- LISTA ORDENADA ----------------------\n\n");
        insert(9, Letra);  
        printf("%s\n", Letra);
    }

    if(Opcao==4)
    {
        printf("---------------------- LISTA ORDENADA ----------------------\n\n");
        quicksort(9, Letra);  
        printf("%s\n", Letra);
    }
    return 0;
}
void bubble(int conta, char *Letra)
{
    int i, j;
    for (i=conta-1; i>0; i--) 
    {
        int troca = 0;
        for (j=0; j<i; j++)
        {
            if (Letra[j]>Letra[j+1]) 
            { 
                int temp = Letra[j];
                Letra[j] = Letra[j+1];
                Letra[j+1] = temp;
                troca = 1;
            }
            if (troca == 0)
            return;
        }
    }
}

void select(int tamanho, char* Letra)
{
    int a, b, c;
    int troca;
    char t;
    for(a=0; a<tamanho-1; ++a)
    {
        troca = 0;
        c = a;
        t = Letra[a];
        for(b=a+1; b<tamanho; ++b)
        {
            if(Letra[b]<t)
            {
                c = b;
                t = Letra[b];
                troca= 1;
            }
        }
        if(troca)
        {
            Letra[c] = Letra[a];
            Letra[a] = t;
        }
    }
}

void insert(int conta, char* Letra)
{
    int a, b;
    char t;

    for(a=1; a<conta; ++a) 
    {
        t = Letra[a];
        for(b=a-1; b>=0 && t<Letra[b]; b--)
        {
            Letra[b+1] = Letra[b];
            printf("%s\n", Letra);
        }
        Letra[b+1] = t;

    }

}
void quicksort (int conta, char* Letra)
{
    if (conta <= 1)
        return;
    else 
    {
        int x = Letra[0];
        int a = 1;
        int b = conta-1;
        do 
        {
            while (a < conta && Letra[a] <= x) a++;
            while (Letra[b] > x) b--;
            if (a < b) 
            { /* faz troca */
                int temp = Letra[a];
                Letra[a] = Letra[b];
                Letra[b] = temp;
                a++; b--;
            }
        } while (a <= b);
        /* troca pivô */
        Letra[0] = Letra[b];
        Letra[b] = x;
        /* ordena sub-vetores restantes */
        quicksort(b,Letra);
        quicksort(conta-a,&Letra[a]);
    }
}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

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...