#include<iostream>
#include<string>
#include<math.h>
using namespace std;
struct hero
{
string name;
int age;
string sex;
};
void maopao(struct hero a[],int len)//冒泡排序
{
for(int i=0;i<len-1;i++)
{
for(int j=0;j<len-1-i;j++)
{
if(a[j].age>a[j+1].age)
{
struct hero temp=a[j];
a[j]=a[j+i];
a[j+1]=temp;
}
}
}
}
void b(struct hero a[],int len)
{
for(int k=0;k<len;k++)
{
cout<<a[k].name<<a[k].age<<a[k].sex<<endl;
}
}
int main()
{
struct hero a[5]=
{
{"刘备",23,"男" },
{"张飞",22,"男" },
{"赵云",21,"男" },
{"关羽",22,"男" },
{"貂蝉",19,"女" },
};
int len=sizeof(a)/sizeof(a[0]);
maopao(a,len);
for(int i=0;i<5;i++)
{
cout<<a[i].name<<a[i].age<<a[i].sex<<endl;
}
b(a,len);
return 0;
}
这是一个算法问题。你写的冒泡程序算法不对。
不过,如果你想知道你的程序为什么跑一遍后数组的元素都变成一样了?那么你可以通过单元测试的方式检验你的代码正确性。做法原理是:先跑一小段代码,看看它的结果正确吗?和你的假设一样吗?如果不一样,是为什么呢?
例如,把你的冒泡算法改成如下代码,执行后就数组的元素都变成一样了,你想想为什么?
void maopao(struct hero a[], int len)//冒泡排序
{
int i = 0;
//for (int i = 0; i < len - 1; i++)
//{
for (int j = 0; j < len - 1 - i; j++)
{
if (a[j].age > a[j + 1].age)
{
struct hero temp = a[j];
a[j] = a[j + i];
a[j + 1] = temp;
}
}
//}
}
这个一遍执行的结果,数组元素已经都变成一样了,那么,外层的for循环也就没有意义。
struct hero temp=a[j];
a[j]=a[j+i];//这里写错了 a[j]=a[j+1]
a[j+1]=temp;