做产品类的工作上什么网站好,软文广告范例大全,wordpress 评论 html,青海网站设计高端前言 本篇主要讲解的是qsort函数细节以及运用实例。 紧跟我的脚步一起手撕qsort函数吧~ 欢迎关注个人主页#xff1a;逸狼 更多优质内容#xff1a; 拿捏c语言指针#xff08;上#xff09; 拿捏c语言指针#xff08;中#xff09; 拿捏c语言指针#xff08;下… 前言 本篇主要讲解的是qsort函数细节以及运用实例。 紧跟我的脚步一起手撕qsort函数吧~ 欢迎关注个人主页逸狼 更多优质内容 拿捏c语言指针上 拿捏c语言指针中 拿捏c语言指针下 创造不易可以点点赞吗~ 如有错误欢迎指出~ qsort函数介绍 qsort 函数可以实现任意数据的排序 他的底层排序算法是快速排序对应的头文件是string.h 我们在官网cplusplus中搜索 qsort函数 得到如图 参数 和 compar函数的返回值 参数解释 base void* base base指向要排序数组的第一个元素(起始位置void*是为了接收不同类型的数据 num num 的返回类型是size_t base指向的数组的元素个数待排序的数组的元素个数 size size 的返回类型是size_t base指向的数组的元素的大小单位是字节 compar int (*compar)(const void*p1, const void*p2))函数的返回类型是int他有两个参数分别是const void*p1和const void*p2void*是为了接收不同类型的数据return返回时要 强制类型转化 为 被比较的数据的类型。 (*compar)是函数指针该指针指向的函数是用来比较数组中的2个元素的p1和p2分别指向两个不同的元素 compar函数是根据实际要比较的数据自己写的 应用qsort实现排序整形 利用qsort实现排序整形数组 //利用qsort实现排序整形数组
#includestdio.h
#includestdlib.h
int cmp_int(const void*p1,const void *p2)
{return *(int*)p1 - *(int*)p2;//(int*)是强制类型转换为int*类型
}
int main()
{int arr[10] { 9,4,6,1,0,3,7,2,5,8 };int sz sizeof(arr) / sizeof(arr[0]);//排序前打印for (int i 0; i sz; i){printf(%d , arr[i]);}printf(\n);qsort(arr, sz, sizeof(arr[0]), cmp_int);//排序后打印for (int i 0; i sz; i){printf(%d , arr[i]);}return 0;
}代码结果 应用qsort实现排序结构体 排年龄 将年龄排成升序 //利用qsort实现排序结构体数据
#includestdio.h
#includestdlib.h
//定义一个结构体
struct Stu
{char name[20];//名字int age;//年龄
};
//不能直接使用 比较
//
//1.按照年龄比较
int cmp_by_age(const void* p1, const void* p2)
{return ((struct Stu*)p1)-age -((struct Stu*)p2)-age;// (struct Stu*)代表将p1和p1强制类型转化为结构体指针类型
}
void test()
{struct Stu arr[] { {zs,66},{ls,18},{ww,35} };int sz sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), cmp_by_age);
}int main()
{//年龄排成升序test();return 0;
} 调试结果 未排序前 排序完成 排名字 将名字排成升序 //2.按照名字比较
int cmp_by_name(const void* p1, const void* p2)
{return strcmp(((struct Stu*)p1)-name , ((struct Stu*)p2)-name);// (struct Stu*)代表将p1和p1强制类型转化为结构体指针类型
}
void test()
{struct Stu arr[] { {zhangsan,66},{lisi,18},{wangwu,35} };int sz sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), cmp_by_name);
}int main()
{//名字排成升序test();return 0;
} 库函数strcmp 其中比较名字实际上是比字符串大小 这里需要运用库函数strcmp对应的头文件是string.h比较字符串大小是按照对应位置上字符的ASCII值的大小比较的) strcmp的返回值与qsort函数的返回值一致 调试结果