结构体案例2

案例描述

设计一个英雄的结构体,包括成员姓名、年龄和性别。创建结构体数组,数组中存放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,男
请按任意键继续. . .

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值