一、qsort函数
qsort函数是一种排序函数,其头文件为<stdlib.h>
其原型为void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*))
其中int(__cdecl*compare)(const void*,const void*)表示一个函数指针,该指针指向的是一个参数为(const void*,const void*),返回值为int类型(写出两个元素的比较方式)的函数,这个函数需要由我们自己来完成。
二、qsort函数的使用
在qsort函数的使用中,最重要的是如何写出能够比较两个元素大小关系且返回一个int类型变量的函数:
在这里,我们使用int_cmp函数表示对整形元素的比较,char_cmp函数表示对char型元素的比较。str_cmp_name函数和str_cmp_age函数分别表示通过名字和年龄对结构体进行排序。
int类型:将void*类型变量强制转化为(int*)类型后解引用,将两个元素相减即可得到它们的大小关系。
char类型:将void*类型强制转化为(int*)类型后解引用,将其asciii码相减即可得到大小关系。
struct stu类型:比较名字:将void*类型强制转化为struct stu*类型,再调用出name,使用strcmp 函数,即可返回两个字符串的大小关系。
比较年龄:将void*类型强制转化为struct stu*类型,再调用出age,将两个age相 减,即可得到两个整型变量的大小关系。
三、代码实现
使用qsort函数对整型数组、字符串和结构体进行排序的代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct stu {
char name[20];
int age;
}; s[2];
int int_cmp(void* e1, void* e2) {
return *(int*)e1 - *(int*)e2;
}
int char_cmp(void* e1, void* e2) {
return *(char*)e1 - *(char*)e2;
}
int str_cmp_name(void* e1, void* e2) {
return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
}
int str_cmp_age(void* e1, void* e2) {
return ((struct stu*)e1)->age - ((struct stu*)e2)->age;
}
int main() {
int arr1[] = { 4,3,2,6,5,1,8,9,0,7 };
char arr2[] = "badec";
struct stu s[2] = { {"zhangsan",18 },{ "lisi", 22}};
qsort(arr1, sizeof(arr1) / sizeof(arr1[0]), sizeof(arr1[0]), int_cmp);
qsort(arr2, sizeof(arr2) / sizeof(arr2[0]), sizeof(arr2[0]), char_cmp);
qsort(s, sizeof(s) / sizeof(s[0]), sizeof(s[0]), str_cmp_name);
qsort(s, sizeof(s) / sizeof(s[0]), sizeof(s[0]), str_cmp_age);
return 0;
}
以下是代码的运行结果:
int:
char:
str-stu-name:
str-stu-age:
以上就是本篇博客全部内容,如果你觉得这篇博客对你有帮助的话,请记得点赞收藏加关注哦!