C语言-使用qsort函数对自定义结构体数组进行排序

qsort进行排序的数组存储的不能是结构体的指针,需要是结构体本身。

结构体

struct student{
     
    char* id;
    int mark;
}arr[4],
test0={
     "0001",80},
test1={
     "0002",90},
test2={
     "0003",60},
test3={
     "0004",61}
;

排序函数

int cmp(const void *a, const void *b){
     
    int mark1=((struct student *)a)->mark;
    int mark2=((struct student *)b)->mark;
    return mark1>mark2 ? 1:-1;
}

总体代码

#include 
struct student{
     
    char* id;
    int mark;
}arr[4],
test0={
     "0001",80},
test1={
     "0002",90},
test2={
     "0003",60},
test3={
     "0004",61}
;
int cmp(const void *a, const void *b){
     
    int mark1=((struct student *)a)->mark;
    int mark2=((struct student *)b)->mark;
    return mark1>mark2 ? 1:-1;
}
int main(){
     
    arr[0]=test0;arr[1]=test1;arr[2]=test2;arr[3]=test3;
    printf("—————排序前—————\n");
    for(int i=0; i<4; i++)
        printf("%s %d\n",arr[i].id,arr[i].mark);
    qsort(arr,4,sizeof(struct student),cmp);
    printf("—————排序后—————\n");
    for(int i=0; i<4; i++)
        printf("%s %d\n",arr[i].id,arr[i].mark);
    return 0;
}

结果

—————排序前—————
0001 80
0002 90
0003 60
0004 61
—————排序后—————
0003 60
0004 61
0001 80
0002 90

你可能感兴趣的:(算法,C语言,c语言)