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 全志H618ROM新增分区
  • ¥20 jupyter保存图像功能的实现
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况