(c语言)qsort()函数排序结构体

#include
#include
#include
//void qsort          qsort()函数初始是递增排序
// (void* base,       要排序的初始位置
// size_t num,        待排序的元素个数
// size_t width,      待排序的数据元素的大小(字节)
// int(*cmp)(const void* e1,const void* e2))    函数指针—比较函数
//_cdecl——函数调用约定,约定函数由c语言的语法调用

//函数定义要求e1-e2>0时输出整数,e1-e2=0时输出1=0,e1-e2<0时输出负数
//qsort()函数初始是递增排序,若要变为递减排序,则要交换e1和e2

struct Stu
{
    char name[20];
    int age;
};
//设置比较函数
int cmp1(const void* x1, const void* x2)
{
    return strcmp(((struct Stu*)x1)->name,((struct Stu*)x2)->name);
}
int cmp2(const void* x1, const void* x2)
{
    return ((struct Stu*)x1)->age - ((struct Stu*)x2)->age;
}


void test1()        //排序结构体的name元素
{
    struct Stu s[3] = { {"zhangsan",15},{"lisi",30},{"wangwu",25} };
    int sz = sizeof(s) / sizeof(s[0]);
    qsort(s, sz, sizeof(s[0]),cmp1);
    for (int i = 0; i < 3; i++)
    {
        printf("%s ", s[i].name);
    }
}
void test2()    //排序结构体的age元素
{
    struct Stu s[3] = { {"zhangsan",15},{"lisi",30},{"wangwu",25} };
    int sz = sizeof(s) / sizeof(s[0]);
    qsort(s, sz, sizeof(s[0]), cmp2);
    for (int i = 0; i < 3; i++)
    {
        printf("%d ", s[i].age);
    }
}
int main()
{
    test1();
    printf("\n");
    test2();
    return 0;
}

你可能感兴趣的:(c语言,算法,数据结构)