- #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;
- }