Ir ao conteúdo
  • Cadastre-se
br3eninho

Exercicio ordenando vetor de struct

Recommended Posts

Ola pessoal boa tarde,

vamos la,

eu estou com um exercicio e tenho que ordenar um vetor de struct chamado aluno, usando metodo quicksort, sei que ja existe a função qsort em C, porém é com a "propia função feita que se deve ordenar", eu fiz e usei ela com vetores do tipo int e funcionou normal, fiz uma adaptação pequena para char e tambem funcionou, porém agora adaptei para struct, e a mesma não funciona, ele compila no DEV porém não ordena, alguem me ajuda? kakaka agradeço muito!!

 

#include<stdlib.h>
#include<stdio.h>
#include <windows.h>
#define MAX 2

struct aluno {
	char nome[80], curso[60];
	float disciplinaA, disciplinaB, mediaGlobal;
};
typedef struct aluno aluno;
	
void quicksort(int e,int d);
int particao(int e,int d);
void preencher();
void mostra();
aluno a[MAX];
int i;

main() {
	printf("Vamos preencher o vetor\n\n");
	preencher();
	mostra();
	quicksort(0,MAX-1);
	printf("\n\nVetores Ordenados!\n\n\n");
	mostra();
   system("pause");
return 0;
}

void mostra() {
	for(int count=0;count<MAX;count++) {
		printf("Nome: %s \n", a[count].nome);
		printf("Media Global %.2f \n\n",a[count].mediaGlobal);
}
}

void preencher() {
	for(i=0;i<MAX;i++) {
		printf("Vamos preencher a posicao[%d] \nNome:",i);
		scanf(" %d",a[i].nome);
		gets(a[i].nome);
		printf("Curso:");
		gets(a[i].curso);
		_flushall();
		printf("Nota A:");
		scanf(" %f",&a[i].disciplinaB);
		_flushall();
		printf("Nota B:");
		scanf(" %f",&a[i].disciplinaA);
		_flushall();
		(a[i].mediaGlobal =(((a[i].disciplinaA) + (a[i].disciplinaB))/2));
	}
	printf("\n\nVetores preenchidos!\n\n");
}

void quicksort(int e,int d){
    int i;
    if(d>e){
	     i=particao(e,d);
      	     quicksort(e,i-1);
     	     quicksort(i+1,d);
	   }
}
int particao(int e,int d){
aluno v,t;
int i,j;
  v=a[d];
  i=e-1;
  j=d;
  do{
	do{
		      i=i+1; //Procura o Maior
	    }while ((a[i].mediaGlobal<v.mediaGlobal)/* &&  (i<d)*/);
     do{
             j=j-1; // Procura Menor
	    } while ((a[j].mediaGlobal>v.mediaGlobal)/* && (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 alguem conseguir me ajudar, agradeço muito e se não conseguirem tambem vou agradecer muito *---*

obs: o comentario dentro do " Do while" é que tentei para ver se mudava algo, porém tambem não x.x

adicionado 34 minutos depois

Pronto pessoal, achei o problema, na comparação de busca pelo maior e menor, precisava isolar entre parentes para fazer a busca. bom, tudo certo hehe ^;^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×