请问一下,这个冒泡排序他最终的结果没有达到预期,但是程序本身可以运行,请问究竟是什么地方出错了??
我想做的程序是一个可以根据人物年龄将所有人物排序的程序
#include <iostream>
#include <string>
using namespace std;
struct hero {
string name;//姓名
int age;//年龄
string sex;//性别
};//定义英雄结构体
//定义冒泡排序函数
void BubbleSort(hero heroArray[],int len){
for (int i = 0; i < len; i++) {
for (int j = 0; j < i - 1; j++) {
if ( heroArray[j].age > heroArray[j + 1].age) {
hero temp = heroArray[j];
heroArray[j] = heroArray[j + 1];
heroArray[j + 1] = temp;
}
}
}
}
void PrintHero(struct hero heroArray[],int len) {
for (int i = 0; i < len; i++) {
cout << "姓名:" << heroArray[i].name << " 年龄:" << heroArray[i].age
<< " 性别:" << heroArray[i].sex << endl;
}
}
int main() {
//创建英雄结构体
hero heroArray[3] = {
{"张飞",20,"男"},
{"关羽",21,"男"},
{"貂蝉",18,"女"}
};
//计算数量
int len = sizeof(heroArray) / sizeof(heroArray[0]);
//排序,年龄从高到低
BubbleSort(heroArray,len);
//打印
PrintHero(heroArray, len);
system("pause");
return 0;
}
循环里的第二个for应该是len减1减 i 不是 i 减1
冒泡排序每一趟都得跑到未排序数组的最后一个,如果你是按从低到高排序,那么每一趟都会把最大的一个数据放到最后,然后第二趟的时候 i++,len - 1 - i,就再少往后走一个,如果你直接用 i - 1 作为判断条件最开始 i 等于0;你再想想看你这个循环是怎么执行的
for (int j = 0; j < i ; j++)
不是i-1
否则i是5的时候,j最多取到3,4没人管?