c语言用sort对数组和结构体数组排序

对数组排序

//头文件
#include
using namespace std;

int a[5]={1,3,4,2,5};
sort(a,a+5);//输出结果:1 2 3 4 5
//sort默认从小到大排序 (升序)

//从大到小排序(降序)
bool cmp(int a,int b)
    return a>b;
sort(a,a+5,cmp);//输出结果:5 4 3 2 1
/*如果将cmp函数大于号改成小于号,即
bool cmp(int a,int b)
    return a

对结构体排序

struct node
{
    int k,s;
}p[5];//结构体放在函数前面

bool cmp(node x,node y)
{
    return x.s>y.s;   //根据结构体中的s降序排序(从大到小) 
}
int main()
{
    for (int i = 0; i < 5; i++)
        scanf("%d%d", &p[i].k, &p[i].s);//输入结构体数组
    sort(p, p + 5, cmp);//按结构体中s降序排序
    return 0;
}

结构体数组简单用法

有三名同学,他们的数学英语成绩如下表

同学 数学成绩 英语成绩
1号 99 70
2号 77 80
3号 66 90

要求按英语成绩从大到小给1号2号3号同学排序
代码如下

#include
#include
using namespace std;

struct node
{
    int math,english;
}p[3];//结构体记录三个同学的数学英语成绩

bool cmp(node x,node y)
{
    return x.english>y.english;   //根据结构体中的英语成绩降序排序(从大到小) 
}
int main()
{
    p[0].math=99,p[0].english=70;//一号同学的数学,英语成绩
    p[1].math=77,p[1].english=80;//类推
    p[2].math=66,p[2].english=90;
    sort(p, p + 3, cmp);//排序
    for (int i = 0; i < 3; i++)
        printf("第%d号同学的数学成绩为%d,英语成绩为%d\n",i+1, p[i].math, p[i].english);//输出排序后的结构体数组
    return 0;
}
/*
输出结果:
第1号同学的数学成绩为66,英语成绩为90
第2号同学的数学成绩为77,英语成绩为80
第3号同学的数学成绩为99,英语成绩为70
Press any key to continue
*/

你可能感兴趣的:(c语言用sort对数组和结构体数组排序)