Ir ao conteúdo
  • Cadastre-se

Exercicio ordenando vetor de struct


br3eninho

Posts recomendados

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 ^;^

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...