我希望您指导按名称按字母顺序排序,我使用的是冒泡法,但它对我不起作用,排序方法真的让我感到困惑。谢谢。
我尝试使用Shel方法,但这对我来说也很困难
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.