文明农村建设网站,海口企业做网站设计,商城网站建设公司电话,做网站网站需要注意什么#x1f525;博客主页#x1f525;#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞#x1f44d;评论✍收藏⭐ 目录 1. 函数介绍 2. qsort举例排列整型变量
3. qsort举例排列结构型变量
3.1 按名字排序
3.1.1 srtcmp函数
3.2 按年龄排序
4. qsort函数模拟实现(采用冒泡的… 博客主页【 坊钰_CSDN博客 】 欢迎各位点赞评论✍收藏⭐ 目录 1. 函数介绍 2. qsort举例排列整型变量
3. qsort举例排列结构型变量
3.1 按名字排序
3.1.1 srtcmp函数
3.2 按年龄排序
4. qsort函数模拟实现(采用冒泡的方式)
5. 小结 1. 函数介绍
void qsort (void* base, size_t num, size_t size,int (*compar)(const void*,const void*));
可以看到qsort函数有四种参数我们来一一解释 1. void* base 指向要排序的数组的第一个对象的指针转换为 void*,通俗来讲就是数组首元素地址 2. size_t num 数组中指向的元素个数 3. size_t size 数组中每个元素的大小以字节为单位 4. int (*compar)(const void*,const void*) 指向比较两个元素的函数的指针。 此函数通过比较两个元素反复调用。它应遵循以下原型 将两个指针作为参数都转换为 const void*。该函数通过返回以稳定和传递的方式定义元素的顺序 注意qsort函数无返回值 2. qsort举例排列整型变量
#include stdio.hint cmp_imp(const void* p1, const void* p2)
{return *(int*)p1 - *(int*)p2;
}int main()
{int arr[] { 2,3,4,1,5,7,6,8,9,10 };int sz sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), cmp_imp);for (int i 0; i sz; i){printf(%d , *(arr i));}return 0;
}3. qsort举例排列结构型变量
这是一个结构体
struct Student
{char name[100];int age;
};
3.1 按名字排序
这个用到了strcmp函数
3.1.1 srtcmp函数
int strcmp ( const char * str1, const char * str2 ) 返回值 代码
#include stdio.hstruct Student
{char name[100];int age;
};void cmp_srt_imp(const void* p1, const void* p2)
{return strcmp(((struct Student*)p1)-name , ((struct Student*)p2)-name);
}int main()
{struct Student arr[3] { {zhangsan,18},{lisi,20},{wangwu,19}};int sz sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), cmp_srt_imp);for (int i 0; i sz; i){printf(%s %d , arr[i]);}return 0;
}3.2 按年龄排序
struct Student
{char name[100];int age;
};void cmp_srt_imp(const void* p1, const void* p2)
{return ((struct Student*)p1)-age - ((struct Student*)p2)-age;
}int main()
{struct Student arr[3] { {zhangsan,18},{lisi,20},{wangwu,19} };int sz sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), cmp_srt_imp);for (int i 0; i sz; i){printf(%s %d , arr[i]);}return 0;
}
4. qsort函数模拟实现(采用冒泡的方式)
用这样的方式qsort函数可排列任意的数据类型
代码
#include stdio.h//仿qsort函数重写冒泡排序int cmp(const void* p1, const void* p2) //所选择的比较方法
{return (*(int*)p1 - *(int*)p2);
}void cmp_swap(char* p1, char* p2,int width) //实现数组元素的交换
{for (int i 0; i width; i){int ret *p1;*p1 *p2;*p2 ret;p1;p2;}
}void bubble(void* base, int sz, int width, int (*cmp)(const void* p1, const void* p2))
{for (int i 0; i sz - 1; i) //冒泡排序趟数{for (int j 0; j sz - i - 1; j) //每一趟冒泡排序{if (cmp((char*)base j * width, (char*)base (j 1) * width ) 0){//符合条件进行交换cmp_swap(((char*)basej*width), ((char*)base (j1) * width),width);}}}
}int main()
{int arr[] { 2,1,3,5,6,4,7,9,8,10 }; //定义整型数组并初始化int sz sizeof(arr) / sizeof(arr[0]); //计算数组长度bubble(arr,sz,sizeof(arr[0]),cmp); //模拟qsort函数实现冒泡排序for (int i 0; i sz; i){printf(%d , arr[i]);}return 0;
}
5. 小结
以上就是关于qsort函数的内容了具体还需宝子们去实践如果觉得该博客对你有用的话希望一键三连点个关注不迷路谢谢支持