Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marina_DC

[Resolvido] ordenação de dados

Recommended Posts

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 NAO 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]);
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.