JChunn
2016-12-22 12:22
采纳率: 50%
浏览 1.1k

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;
    }
    
    已采纳该答案
    打赏 评论
  • GKatHere 2016-12-24 03:48

    sort

     #include "algorithm"
    int _tmain(int argc, _TCHAR* argv[])
    {
        struct A
        {
            int age;
            LPCSTR name;
        };
        A as[] = {{18, "b"}, {19, "a"}, {20, "c"}, };
    
        std::sort(as, as +_countof(as), [](const A& l, const A& r){return l.name[0] < r.name[0];});
        cout << as[0].age << as[0].name <<endl;
        cout << as[1].age << as[1].name <<endl;
        cout << as[2].age << as[2].name <<endl;
    
    
        printf("The End\n");
        ::getchar();
        return 1;
    }
    
    打赏 评论

相关推荐 更多相似问题