qsort函数是C语言的库函数,能实现对各种元素类型的比较,使用的基本思想是快速排序法,头文件是
qsort函数 | |
参数类型 | |
参数类型解释 | 参数1 待排序数组首元素的地址 参数2 数组内元素个数 参数3 数组内每个元素大小,单位是字节 参数4 函数指针,由自己实现,内容是两个元素的比较方法 |
void* | 参数1和参数4中的void*无类型的指针,能够接受各种类型的参数,这样的话,我们就能传各种类型的参数 |
void*的注意事项 | 由于void是无类型指针,所以 1、void类型指针不能进行加减整数的操作(不知道步长) 2、不能进行解引用操作, 3、想要进行这些操作,需要把void类型强制类型转成所需要的类型才能操作,例如(int*)e1,就将void*类型的e1转换为int* |
在自己完成的in_cmp函数中,给出的是两个元素的比较方法
当然,我们可以用强制类型转换后,就知道了步长,使用减法来比较e1和e2的大小
#include
#include
int int_cmp(const void* e1,const void* e2)
{if(*(int*)e1 > *(int*)e2 )//先强制类型转换,在解引用进行比较return 1;else if(*(int*)e1 == *(int*)e2 )return 0;else return -1;
}
int main()
{int i=0;int arr[10]={1,4,0,5,8,9,2,3,6,7};int sz=sizeof(arr)/sizeof(arr[0]);qsort(arr,sz,sizeof(arr[0]),int_cmp);for(i=0;i
#include
#include
int float_cmp(const void* e1,const void* e2)
{return *(float*)e1 - *(float*)e2;
}
int main()
{int i=0;float arr[5]={1.0,3.5,2.2,7.3,5.5};int sz=sizeof(arr)/sizeof(arr[0]);qsort(arr,sz,sizeof(arr[0]),float_cmp);for(i=0;i
以学生信息结构体为例,结构体包括学生名字和学生年龄
以名字为基准进行比较
#include
#include
#includestruct student
{char name[10];int age;
};//以名字来对结构体进行排序
int struct_cmp_byname(const void* e1, const void* e2)
{return strcmp(((struct student*)e1)->name, ((struct student*)e2)->name);
}int main()
{int i=0;struct student stu[3] = { {"张三",20},{"李四",19},{"王五",18}};int sz = sizeof(stu) / sizeof(stu[0]);qsort(stu, sz, sizeof(stu[0]), struct_cmp_byname);for (i = 0; i < sz; i++){printf("%s %d\n", stu[i].name, stu[i].age);}
}
以年龄为基准进行比较
#include
#include
#includestruct student
{char name[10];int age;
};//以年龄来对结构体进行排序
int struct_cmp_byage(const void* e1, const void* e2)
{return ((struct student*)e1)->age - ((struct student*)e2)->age;
}int main()
{int i=0;struct student stu[3] = { {"张三",20},{"李四",19},{"王五",18}};int sz = sizeof(stu) / sizeof(stu[0]);qsort(stu, sz, sizeof(stu[0]), struct_cmp_byage);for (i = 0; i < sz; i++){printf("%s %d\n", stu[i].name, stu[i].age);}
}
👍🏻点赞,你的认可是我创作的动力!
⭐收藏,你的青睐是我努力的方向!
✏️评论,你的意见是我进步的财富!