用库函数qsort实现任意类型数据排序C语言-创新互联
qsort函数介绍
当前名称:用库函数qsort实现任意类型数据排序C语言-创新互联
网站URL:http://pwwzsj.com/article/cdcigc.html
void qsort(void* base, size_t num, size_t size, int (*compar)(const void*, const void*));
创新互联于2013年成立,是专业互联网技术服务公司,拥有项目网站设计、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元西乡塘做网站,已为上家服务,为西乡塘各地企业和个人服务,联系电话:13518219792参数分析库函数qsort有四个参数
void* basebase中存放的是待排序数据中第一个对象的地址
size_t num待排序数据中的元素个数
size_t size待排序数据中,每个元素占的字节数
int (*compar)(const void*, const void*)函数指针compar,指向用来比较待排序数据中的两个元素的函数
第一个const void*,存放第一个元素的地址
第二个const void*,存放第二个元素的地址
使用方法qsort排序函数,需要引头文件#include
并且需自定义一个比较函数
代码样例以整形数据和结构体数据排序为例
#include#include#include//void qsort(void* base, size_t num, size_t size, int (*compar)(const void*, const void*));
//库函数qsort有四个参数
//void* base, base中存放的是待排序数据中第一个对象的地址
//size_t num, 待排序数据中的元素个数
//size_t size, 待排序数据中,每个元素占的字节数
//int (*compar)(const void*, const void*) 函数指针compar,指向用来比较待排序数据中的两个元素的函数
//第一个const void*,存放第一个元素的地址
//第二个const void*,存放第二个元素的地址
//qsort排序函数,需要引头文件#includeint compar_int(const void* e1, const void* e2)//整形数组排序
{
return *(int*)e1 - *(int*)e2;//强制类型转换成int
}
struct Stu
{
char name[20];
int age;
};
int sort_by_age(const void* e1, const void* e2)//结构体数组排序,按年龄排序
{
return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
}
int sort_by_name(const void* e1, const void* e2)//结构体数组排序,按名字排序
{
return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
void print1(int arr[], int sz)
{
int i = 0;
for (i = 0; i< sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
//排序整形数组
int arr1[] = { 1,3,5,7,9,2,4,6,8,0 };
int sz = sizeof(arr1) / sizeof(arr1[0]);
print1(arr1, sz);
//排序
qsort(arr1,sz,sizeof(arr1[0]),compar_int);
//打印
print1(arr1, sz);
printf("\n");
//排序结构体数据
struct Stu s[3] = { {"zhangsan",30},{"lisi",34},{"wangwu",20}};
sz = sizeof(s) / sizeof(s[0]);
struct Stu* p = s;
for (p = s; p< &s[3]; p++)
{
printf("%s,%d\n", p->name, p->age);
}
printf("\n");
//按照年龄排序
qsort(s, sz, sizeof(s[0]),sort_by_age);
for (p = s; p< &s[3]; p++)
{
printf("%s,%d\n", p->name, p->age);
}
printf("\n");
//按照名字排序
qsort(s, sz, sizeof(s[0]), sort_by_name);
for (p = s; p< &s[3]; p++)
{
printf("%s,%d\n", p->name, p->age);
}
printf("\n");
return 0;
}
运行结果
注意事项以上代码默认为升序排列
如果需要降序排列,只需将比较函数中的返回值改为e2-e1即可(交换e1和e2)
char字符串比较时,需定义的比较函数,如下所示
int cmp_char(const void*e1,const void*e2)
{
return strcmp((char*)e1,(char*)e2);
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
当前名称:用库函数qsort实现任意类型数据排序C语言-创新互联
网站URL:http://pwwzsj.com/article/cdcigc.html