0
点赞
收藏
分享

微信扫一扫

使用库函数qsort

先在MSDN上了解一下qsort的大致内容。

void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );

第一个参数是待排序数组的首元素地址,第二个参数是待排序数组的元素个数,第三个数组是待排序数组的每个元素的大小(单位字节),第四个参数是一个函数指针,比较两个元素所用函数的地址。这个函数要自己实现,大于返回大于0的数字,等于返回0,小于返回一个小于0的数字。

今天实现一下结构体排序。

#include<stdlib.h>
#include<string.h>
//结构体的声明要放在使用的前面,不然会报错
struct stu
{
char name[20];
int age;
};

int cmp_stu_name(const void* e1,const void* e2)
{
return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
}

void test1()
{
struct stu s[3] = { {"zhangsan",20},{"lisi",30},{"wangwu",10} };
int sz = sizeof(s) / sizeof(s[0]);
qsort(s, sz, sizeof(s[0]), cmp_stu_name);
}//按ASCII排序

int cmp_stu_age(const void* e1, const void* e2)
{
return ((struct stu*)e1)->age - ((struct stu*)e2)->age;
}

void test2()
{
struct stu s[3] = { {"zhangsan",20},{"lisi",30},{"wangwu",10} };
int sz = sizeof(s) / sizeof(s[0]);
//运行到下面这个函数的时候不要按F11,会出错
//按F10就可以了
//在监视里面可以观察到数组的变化
qsort(s, sz, sizeof(s[0]), cmp_stu_age);
}

int main()
{
test2();
test1();
return 0;
}

刚从B站学完出来,怕忘了,趁着印象还深,先在这里存着,有时间再复习。

举报

相关推荐

0 条评论