JChunn 2016-12-22 12:22 采纳率: 50%
浏览 1105
已采纳

C++中,如何将结构数组里面一个成员拿出来排序?

struct student
{
int num;
char name[20];
char sex;
int grade;
};
void main()
{
int i;
float ave, sum = 0;
struct student stu[5];
for (i = 0; i < 5; i++)
{
cout << "请依次输入学生" << i+1 << "的学号、姓名、性别、成绩" << endl;
cin >> stu[i].num >> stu[i].name >> stu[i].sex >> stu[i].grade;
}}

如题:如何将其中5个成员grade拿出来进行排序?
已经弄了冒泡排序法的函数,但是不知道用不用的着,调用函数时候有错误
void bubble(int [], int);

void bubble(int a[], int size)

{
int i, temp;
for (int pass = 1; pass < size; pass++)
{
for(i=0;i if (a[i] > a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
for (i = 0; i < size; i++)
cout << a[i] << ",";
cout << endl;
}
}

  • 写回答

2条回答 默认 最新

  • Xefvan 2016-12-22 13:18
    关注

    前段时间帮同学写了个选课的系统,里面也涉及结构排序,这是给同学写的简易的代码

    void CourseMange::SortCourse()
    {
        for (int i = m_vCourseArray.size() - 1; i >= 0; --i)
        {
            for (int j = 0; j < i; j++)
            {
                if (m_vCourseArray[j].id > m_vCourseArray[j + 1].id)
                    swap(m_vCourseArray[j], m_vCourseArray[j + 1]);
            }
        }
    }
    

    如果你是要将每个成员根据grade进行排序的话,你可以先进行比对一下,你的冒泡排序里的if条件语句进行大小比较的时候,应该取出每一个结构中的grade进行比较大小

    代码如下

    void bubble(struct student a[], int size)
    {
        for (int pass = 0; pass < size; pass++)
        {
            for(int i = 0; i < pass; ++i) 
            {
                if (a[i].grade > a[i + 1].grade)
                {
                    swap(a[i], a[i+1]);
                }
            }
        }
    
        for (i = 0; i < size; i++)
        {
            cout << a[i].grade << ",";
        }
        cout << endl;
    }
    

    如果你只是想取出5个成员中grade拿出来进行排序

    由于你设计的冒泡排序中传入的是数组,我将每个成员的grade放入到另一个数组中,进行传参

    代码如下

    #include <iostream>
    using namespace std;
    
    struct student
    {
        int num;
        char name[20];
        char sex;
        int grade;
    };
    
    void bubble(int a[], int);
    
    int main()
    {
        int i;
        float ave, sum = 0;
        struct student stu[5];
        for (i = 0; i < 5; i++)
        {
            cout << "请依次输入学生" << i+1 << "的学号、姓名、性别、成绩" << endl;
            cin >> stu[i].num >> stu[i].name >> stu[i].sex >> stu[i].grade;
        }
    
        int* array = new int[5];
        for(int i = 0; i < 5; ++i)
        {
            array[i] = stu[i].grade;
        }
        bubble(array, 5);
        return 0;
    }
    
    void bubble(int a[], int size)
    {
        int i, temp;
        for (int pass = 0; pass < size; pass++)
        {
            for(i=0; i < pass; ++i) 
            {
                if (a[i] > a[i + 1])
                {
                    temp = a[i];
                    a[i] = a[i + 1];
                    a[i + 1] = temp;
                }
            }
        }
        for (i = 0; i < size; i++)
        {
            cout << a[i] << ",";
        }
        cout << endl;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?