Я хотел бы, чтобы ваше руководство сортировало в алфавитном порядке по имени, я использую метод пузырьков, но он не работает для меня, и методы сортировки меня действительно смущают. Спасибо.
Пробовал использовать метод шел , но мне тоже было сложно
struct persona {
int codigo;
string nombre;
string nombre_Materia;
double nota1,nota2,nota3,nota_final;
};
persona e[7];
int main(){
int size;
cout<<"Ingrese el tamaño de Lista de estudiantes : ";
cin>>size;
for(int i=0;i<=size;i++)
{
system("cls");
cout<<"Ingrese los datos de la persona: " <<i+1<<"\n";
cout <<"Ingrese el codigo: "<<endl;
cin>>e[i].codigo;
cout <<"Ingrese el nombre: "<<endl;
cin>>e[i].nombre;
cout <<"Ingrese el nombre de la materia: "<<endl;
cin>>e[i].nombre_Materia;
cout <<"Ingrese la nota 1: "<<endl;
cin>>e[i].nota1;
cout <<"Ingrese la nota 2: "<<endl;
cin>>e[i].nota2;
cout <<"Ingrese la nota 3: "<<endl;
cin>>e[i].nota3;
e[i].nota_final = e[i].nota1 * 0.30 + e[i].nota2 * 0.30 + e[i].nota3 * 0.40;
}
int i, j;
persona tempo;
for(i=0; i<size-1; i++)
for(j=i+1; j<size; j++)
if( (e[i].nombre > e[j].nombre) || (e[i].nombre == e[j].nombre && e[i].nombre> e[j].nombre) )
{
tempo = e[i];
e[i] = e[j];
e[j] = tempo;
}
//Declarmaos un for para que lea el vector persona2
for(int j=0;j<=size;j++)
{
cout<<"Mostrando persona:"<<j+1<<"\n";
cout<<"Persona: "<<e[j].codigo<<"\n";
cout<<"Persona: "<<e[j].nombre<<"\n";
cout<<"Persona: "<<e[j].nombre_Materia<<"\n";
cout<<"Persona: "<<e[j].nota_final<<"\n";
}
};
Уменьшите количество итераций этого последнего цикла на 1:
С другой стороны, обратите внимание, что условие упорядочения не имеет особого смысла:
Порядок, насколько я понимаю, восходящий, поэтому это условное выражение можно немного упростить, так как вам нужно только проверить, больше ли первое имя, чем второе:
В противном случае код работает нормально.
Я долгое время не использовал пузырь, поэтому я взял код с этой страницы: http://c.conclase.net/orden/?cap=burbuja Применив этот код к вашему примеру, ваш заказ будет таким:
Я попробовал это, и это сработало для меня, как дополнительные данные, в вашем случае, когда вы запрашиваете данные, которые у вас были <=, и там должно быть только <, потому что, если он не выполняется дополнительное время. Я поставил код как у меня был окончательный код и судя по всему заработало, надеюсь вам поможет
Ваш подход к проблеме более сложен, чем необходимо. Просто определите отношение упорядочения между экземплярами
persona
и делегируйте упорядочение стандартному библиотечному алгоритму .Начнем с определения оператора «меньше» (
<
) для объектовpersona
:Определив этот оператор, вы сможете сортировать:
Ваш код может выглядеть примерно так:
Вы можете увидеть, как он работает в TIO.