#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//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;
}