Asialing 2021-10-13 13:04 采纳率: 81.8%
浏览 125
已结题

C语言结构体的冒泡排序

请问一下,这个冒泡排序他最终的结果没有达到预期,但是程序本身可以运行,请问究竟是什么地方出错了??

我想做的程序是一个可以根据人物年龄将所有人物排序的程序

#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;
}

img

  • 写回答

2条回答 默认 最新

  • Autumn0923 2021-10-13 14:01
    关注

    循环里的第二个for应该是len减1减 i 不是 i 减1
    冒泡排序每一趟都得跑到未排序数组的最后一个,如果你是按从低到高排序,那么每一趟都会把最大的一个数据放到最后,然后第二趟的时候 i++,len - 1 - i,就再少往后走一个,如果你直接用 i - 1 作为判断条件最开始 i 等于0;你再想想看你这个循环是怎么执行的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月21日
  • 已采纳回答 10月13日
  • 创建了问题 10月13日

悬赏问题

  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!