案例描述
设计一个英雄的结构体,包括成员姓名、年龄和性别。创建结构体数组,数组中存放5名英雄。
通过冒泡排序的算法,将数组中的英雄按照年龄进行升序排列,最终打印排序后的结果。
五名英雄信息如下:
{"刘备",23,"男"},
{"关羽",22,"男"},
{"张飞",20,"男"},
{"赵云",21,"男"},
{"貂蝉",19,"女"};
之前做过的冒泡排序法的题
错误代码
#include<iostream>
#include<string>
using namespace std;
struct hero{
string name;
int age;
string sex;
};//英雄数据类型
void Bubblesort(hero hArray[],int len){
for(int i = 0;i < 5 - 1;i++){
for(int j = 0;j < 5 - i - 1;j++){
if(hArray[j].age > hArray[j + 1].age){
int temp = hArray[j].age;
hArray[j].age = hArray[j + 1].age;
hArray[j + 1].age = temp;
}
}
}
}//排序
void printheros(hero hArray[],int len){
for(int i = 0;i < 5;i++){
cout<<hArray[i].name<<","<<hArray[i].age<<","<<hArray[i].sex<<endl;
}
}
int main(){
struct hero hArray[5] = {
{"刘备",23,"男"},
{"关羽",22,"男"},
{"张飞",20,"男"},
{"赵云",21,"男"},
{"貂蝉",19,"女"}
};
int len = sizeof(hArray) / sizeof(hArray);
Bubblesort(hArray,len);
printheros(hArray,len);
system("pause");
return 0;
}
错误原因
在数值交换的时候,只交换了年龄,导致其他信息仍处于原位置
修改后代码
#include<iostream>
#include<string>
using namespace std;
struct hero{
string name;
int age;
string sex;
};//英雄数据类型
void Bubblesort(hero hArray[],int len){
for(int i = 0;i < 5 - 1;i++){
for(int j = 0;j < 5 - i - 1;j++){
if(hArray[j].age > hArray[j + 1].age){
hero temp = hArray[j];
hArray[j] = hArray[j + 1];
hArray[j + 1] = temp;
}
}
}
}//排序
void printheros(hero hArray[],int len){
for(int i = 0;i < 5;i++){
cout<<hArray[i].name<<","<<hArray[i].age<<","<<hArray[i].sex<<endl;
}
}
int main(){
struct hero hArray[5] = {
{"刘备",23,"男"},
{"关羽",22,"男"},
{"张飞",20,"男"},
{"赵云",21,"男"},
{"貂蝉",19,"女"}
};
int len = sizeof(hArray) / sizeof(hArray);
Bubblesort(hArray,len);
printheros(hArray,len);
system("pause");
return 0;
}
运行结果
貂蝉,19,女
张飞,20,男
赵云,21,男
关羽,22,男
刘备,23,男
请按任意键继续. . .