|
发表于 2023-10-30 21:10:48
|
显示全部楼层
这段代码有两个问题。
首先,在冒泡排序的内部循环中,第二个for循环的条件写错了。应该是 j<4-i 而不是 i<4-i 。这是因为内部循环的目的是将当前未排序的最大值移到数组的最后,所以每次内部循环的次数都应该减少。
其次,在主函数中调用 bubblesort 函数时,不需要再次声明 struct hero arr[5] 。应该直接调用 bubblesort(arr) 。
下面是修改后的代码:
- #include<iostream>
- #include<string>
- using namespace std;
- struct hero
- {
- string name;
- int age;
- string sex;
-
- };
- //冒泡排序
- void bubblesort(struct hero arr[5])
- {
- for(int i=0;i<4;i++)
- {
- for(int j=0;j<4-i;j++) // 修改此处的条件
- {
- if(arr[j].age>arr[j+1].age)
- {
- struct hero temp=arr[j];
- arr[j]=arr[j+1];
- arr[j+1]=temp;
- }
- }
- }
- }
- int main()
- {
- struct hero arr[5]=
- {
- {"刘备",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;
- }
复制代码
这样修改后的代码将会正确地按照年龄从小到大排序并输出。 |
|