Ir ao conteúdo
  • Cadastre-se

Problema com Bubble e Quick Sort


Akvoz

Posts recomendados

Bom dia.

estou tentando fazer dois programas e usar ordenamento, um por Quick Sort e outro por Bubble Sort.

tenho q fazer o ordenamento por Nome do carro e Placa escolhidos pelo o usuario. Um programa com o Quick e outro com o Bubble.

quem poder me ajudar ficaria grato

Segue o Codigo do programa sem nenhum dos ordenamentos

#include <stdio.h>

#include <stdlib.h>

#define MAX 5

typedef enum{

GASOLINA, ALCOOL, FLEX, DIESEL, GAS

}TipoCombustivel;

typedef struct {

char nome[30];

char placa[12];

char cor[30];

int quantidadePortas;

TipoCombustivel tipoCombustivel;

}Carro;

int opcao();

Carro *alocarMemoria();

void incluirCarro(Carro *p[], int *q);

void incluir(Carro *p);

void excluirCarro(Carro *p[], int *q);

int pesquisarCarro(Carro *p[], int *q);

char *converteTipoCombustivel(TipoCombustivel t);

void exibir(Carro *p);

void exibirCarro(Carro *p[], int q);

void alterarCarro(Carro *p[], int q);

int main(){

int op = 0;

int quantidade = 0;

Carro *vet[MAX];

do{

op = opcao();

switch(op){

case 1:

incluirCarro(vet, &quantidade);

break;

case 2:

excluirCarro(vet, &quantidade);

break;

case 3:

alterarCarro(vet, quantidade);

break;

case 4:

exibirCarro(vet, quantidade);

break;

}

}while(op != 5);

getchar();

return 0;

}

Carro *alocarMemoria(){

Carro *p = malloc(sizeof(Carro));

if(!p){

printf("Erro ao alocar memoria...");

exit(1);

}

return p;

}

int opcao(){

int op = 0;

do{

printf("\t\t\tMenu\n\n");

printf("\t\t\t1 - Incluir \n\n");

printf("\t\t\t2 - Excluir \n\n");

printf("\t\t\t3 - Alterar \n\n");

printf("\t\t\t4 - Exibir \n\n");

printf("\t\t\t5 - Sair \n\n");

printf("Opcao: ");

scanf("%d", &op);

}while( op < 1 || op > 5);

return op;

}

void incluirCarro(Carro *p[], int *q){

p[*q] = alocarMemoria();

if(*q < MAX){

incluir(p[*q]);

(*q)++;

}else{

printf("VETOR DE REGISTROS CHEIO.");

}

}

void incluir(Carro *p){

printf("Digite o nome do carro\n");

scanf("%s", p->nome);

printf("Digite a placa do carro\n");

scanf("%s", p->placa);

printf("Digite a cor do carro\n");

scanf("%s", p->cor);

printf("Digite quantidade de portas do carro\n");

scanf("%d", &p->quantidadePortas);

printf("Digite o tipo de combustivel do carro - 0 (Gasolina), 1 (Alcool), 2 (Flex), 3 (Diesel)\n");

scanf("%d", &p->tipoCombustivel);

}

void excluirCarro(Carro *p[], int *q){

int ultima = *q - 1;

int i = pesquisarCarro(p, q);

if(i > -1){

free(p);

p = p[ultima];

p[ultima] = NULL;

(*q)--;

}

}

int pesquisarCarro(Carro *p[], int *q){

char op;

int i;

for(i = 0; i < *q; i++){

exibir(p);

printf("\n\n");

printf("Deseja excluir o carro acima? (S/N) ");

fflush(stdin);

scanf("%c", &op);

if(op == 'S' || op == 's'){

return i;

}

}

return -1;

}

void exibirCarro(Carro *p[], int q){

int i;

for( i = 0; i < q; i++){

exibir(p);

printf("\n\n");

}

}

void exibir(Carro *p){

printf("Nome do carro: %s\n", p->nome);

printf("Placa do carro: %s\n", p->placa);

printf("Cor do carro: %s\n", p->cor);

printf("Quantidade de portas do carro: %d\n", p->quantidadePortas);

printf("Tipo de combustivel do carro: %s\n", converteTipoCombustivel(p->tipoCombustivel));

}

void alterarCarro(Carro *p[], int q){

int i = pesquisarCarro(p, &q);

if(i > -1){

printf("\nDigite os novos dados para o carro selecionado.\n");

incluir(p);

}

}

char *converteTipoCombustivel(TipoCombustivel t){

switch(t){

case GASOLINA:

return "Gasolina";

break;

case ALCOOL:

return "Alcool";

break;

case FLEX:

return "Flex";

break;

case DIESEL:

return "Diesel";

break;

default:

return "Nao Especificado";

break;

}

}

Minha tentativa de por Bubble Sort

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MAX 5

typedef enum{

GASOLINA, ALCOOL, FLEX, DIESEL, GAS

}TipoCombustivel;

typedef struct {

char nome[30];

char placa[12];

char cor[30];

int quantidadePortas;

TipoCombustivel tipoCombustivel;

}Carro;

int opcao();

Carro *alocarMemoria();

void incluirCarro(Carro *p[], int *q);

void incluir(Carro *p);

void excluirCarro(Carro *p[], int *q);

int pesquisarCarro(Carro *p[], int *q);

char *converteTipoCombustivel(TipoCombustivel t);

void exibir(Carro *p);

void exibirCarro(Carro *p[], int q);

void alterarCarro(Carro *p[], int q);

void sortnome(Carro *p[], int q);

void sortplaca(Carro *p[], int qtd);

void sortBolha(Carro *p[], int i);

int main(){

int op = 0;

int quantidade = 0;

Carro *vet[MAX];

do{

op = opcao();

switch(op){

case 1:

incluirCarro(vet, &quantidade);

break;

case 2:

excluirCarro(vet, &quantidade);

break;

case 3:

alterarCarro(vet, quantidade);

break;

case 4:

exibirCarro(vet, quantidade);

break;

}

}while(op != 5);

getchar();

return 0;

}

Carro *alocarMemoria(){

Carro *p = malloc(sizeof(Carro));

if(!p){

printf("Erro ao alocar memoria...");

exit(1);

}

return p;

}

int opcao(){

int op = 0;

do{

printf("\t\t\tMenu\n\n");

printf("\t\t\t1 - Incluir \n\n");

printf("\t\t\t2 - Excluir \n\n");

printf("\t\t\t3 - Alterar \n\n");

printf("\t\t\t4 - Exibir \n\n");

printf("\t\t\t5 - Sair \n\n");

printf("Opcao: ");

scanf("%d", &op);

}while( op < 1 || op > 5);

return op;

}

void incluirCarro(Carro *p[], int *q){

p[*q] = alocarMemoria();

if(*q < MAX){

incluir(p[*q]);

(*q)++;

}else{

printf("VETOR DE REGISTROS CHEIO.");

}

}

void incluir(Carro *p){

printf("Digite o nome do carro\n");

scanf("%s", p->nome);

printf("Digite a placa do carro\n");

scanf("%s", p->placa);

printf("Digite a cor do carro\n");

scanf("%s", p->cor);

printf("Digite quantidade de portas do carro\n");

scanf("%d", &p->quantidadePortas);

printf("Digite o tipo de combustivel do carro - 0 (Gasolina), 1 (Alcool), 2 (Flex), 3 (Diesel)\n");

scanf("%d", &p->tipoCombustivel);

}

void excluirCarro(Carro *p[], int *q){

int ultima = *q - 1;

int i = pesquisarCarro(p, q);

if(i > -1){

free(p);

p = p[ultima];

p[ultima] = NULL;

(*q)--;

}

}

int pesquisarCarro(Carro *p[], int *q){

char op;

int i;

for(i = 0; i < *q; i++){

exibir(p);

printf("\n\n");

printf("Deseja excluir o carro acima? (S/N) ");

fflush(stdin);

scanf("%c", &op);

if(op == 'S' || op == 's'){

return i;

}

}

return -1;

}

void exibirCarro(Carro *p[], int q){

int i;

int op;

system("cls");

printf("Ordenar por\n 1 - <Nome>\n 2 - <Placa>");

printf("Opcao: ");

scanf("%d", op);

switch(op){

case 1:

sortnome(p,q);

system("cls");

printf("Carros Ordenados por nome\n\n");

printf("Para voltar ao menu, pressione qualquer tecla\n\n");

for (i=0; i < q; i++){

exibir(p);

printf("\n");

}

printf("Continue");

getch();

break;

case 2:

sortplaca (p, q);

system("cls");

printf("Carros Ordenados por placa\n\n");

for (i=0; i < q; i++){

exibir(p);

printf("\n");

}

printf("Continuar...");

getch();

break;

default:

print ("Opcao invalida");

getch();

break;

}

}

void exibir(Carro *p){

printf("Nome do carro: %s\n", p->nome);

printf("Placa do carro: %s\n", p->placa);

printf("Cor do carro: %s\n", p->cor);

printf("Quantidade de portas do carro: %d\n", p->quantidadePortas);

printf("Tipo de combustivel do carro: %s\n", converteTipoCombustivel(p->tipoCombustivel));

}

void alterarCarro(Carro *p[], int q){

int i = pesquisarCarro(p, &q);

if(i > -1){

printf("\nDigite os novos dados para o carro selecionado.\n");

incluir(p);

}

}

char *converteTipoCombustivel(TipoCombustivel t){

switch(t){

case GASOLINA:

return "Gasolina";

break;

case ALCOOL:

return "Alcool";

break;

case FLEX:

return "Flex";

break;

case DIESEL:

return "Diesel";

break;

default:

return "Nao Especificado";

break;

}

}

void sortnome(Carro *p[], int qtd) {

int i;

int compara;

int swap;

do

{

qtd--;

swap=0;

for(i=0; i < qtd; i++)

{

compara=strcoll (strupr(p->nome), strupr(p[i+1]->nome));

if (compara > 0)

{

sortBolha (p, i);

swap = 1;

}

}

}

while(swap);

}

void sortplaca(Carro *p[], int qtd) {

int i;

int compara;

int swap;

do

{

qtd--;

swap=0;

for(i=0; i < qtd; i++)

{

compara=strcoll(strupr (p->placa), strupr (p[i+1]->placa));

if (compara > 0)

{

sortBolha (p, i);

swap = 1;

}

}

}

while (swap);

}

void sortBolha(Carro *p[], int i)

{

int aux = 0;

aux = p;

p = p[i+1];

p[i+1] = aux;

}

}

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...