这个代码错在哪
#include<iostream>#include<string>
using namespace std;
struct hero
{
string name;
int age;
string sex;
};
//冒泡排序
void bubblesort(struct hero arr)
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4-i;i++)
{
if(arr.age>arr.age)
{
struct hero temp=arr;
arr=arr;
arr=temp;
}
}
}
}
int main()
{
struct hero arr=
{
{"刘备",23,"男"},
{"关羽",22,"男"},
{"张飞",20,"男"},
{"赵云",21,"男"},
{"貂蝉",19,"女"},
};
bubblesort(struct hero arr);
int i=0;
for(;i<5;i++)
{
cout<<arr.name<<arr.age<<arr.sex<<endl;
}
return 0;
} 这段代码有两个问题。
首先,在冒泡排序的内部循环中,第二个for循环的条件写错了。应该是 j<4-i 而不是 i<4-i 。这是因为内部循环的目的是将当前未排序的最大值移到数组的最后,所以每次内部循环的次数都应该减少。
其次,在主函数中调用 bubblesort 函数时,不需要再次声明 struct hero arr 。应该直接调用 bubblesort(arr) 。
下面是修改后的代码:
#include<iostream>
#include<string>
using namespace std;
struct hero
{
string name;
int age;
string sex;
};
//冒泡排序
void bubblesort(struct hero arr)
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4-i;j++) // 修改此处的条件
{
if(arr.age>arr.age)
{
struct hero temp=arr;
arr=arr;
arr=temp;
}
}
}
}
int main()
{
struct hero arr=
{
{"刘备",23,"男"},
{"关羽",22,"男"},
{"张飞",20,"男"},
{"赵云",21,"男"},
{"貂蝉",19,"女"},
};
bubblesort(arr); // 修改此处的调用方式
int i=0;
for(;i<5;i++)
{
cout<<arr[ i].name<<arr[ i].age<<arr[ i].sex<<endl;
}
return 0;
}
这样修改后的代码将会正确地按照年龄从小到大排序并输出。
页:
[1]