提示:仅供参考,如有错误,还望指出。
前言
这里主要说明了qsort()函数的一些基本运用,可能有些具体的函数还没有弄懂。
但愿还有后续(学习永无止境)。
提示:以下是本篇文章正文内容,下面案例可供参考
一、qsort()函数是什么?
qsort()函数的介绍(下面是其参数的介绍)
//qsort() 称为quick sort译为快速排序
void qsort(
void* base //需要改变的基础(也就是需要排序的数组)
size_t num //数组中数的个数(无符号数)
size_t size //数组中数的类型的字符大小(无符号数)
int (*compar)(const void*, const void*)//调用比较的函数(由于参数的类型为const void*类型,故什么类型都能接收)
//这里也用到了函数参数
);
二、对各种类型的数组进行排序
1.用于整形数组的排序
代码及说明如下(示例):
int cmp1(const void *a,const void *b)
{
//通过对a和b强制转换为(int*)类型,然后再解引用
//最后得出值来推测是否进行转换(后续的也一样)
return *((int*)a) - *((int*)b);
}
void test1()
{
int arr[] = { 10,9,8,7,6,5,4,3,2,1 };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(arr[0]), cmp1);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}
2.用于单精度数组的排序
代码及说明如下(示例):
int cmp2(const void* a, const void* b)
{
//这里需要返回的是int型,而原来是float型故强制转换为int型
return (int) *(float*)a - *(float*)b;
}
void test2()
{
float farr[] = { 5.0,4.0,3.0,2.0,1.0 };
int sz = sizeof(farr) / sizeof(farr[0]);
qsort(farr, sz, sizeof(farr[0]), cmp2);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%f ", farr[i]);
}
}
3.用于结构体数组的排序
3.1年龄排序
代码及说明如下(示例):
//这里运用到typedef对结构体类型的重命名(后续也有谈到其用法)
typedef struct Stu
{
char name[20];
int age;
}Stu;
int cmp3(const void* a, const void* b)
{
//未重命名时,应当写成这样
//return ((struct Stu*)a)->age - ((struct Stu*)b)->age;
//由于重命名故写成这样也行
//这里age为int型故直接使用即可
return ((Stu*)a)->age - ((Stu*)b)->age;
}
void test3()
{
Stu s[3] = { {"zhang da hai",20},{"shu lan",22},{"gou er",10} };
int sz = sizeof(s) / sizeof(s[0]);
qsort(s, sz, sizeof(s[0]), cmp3);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", s[i].age);
printf("%s ", s[i].name);
printf("\n");
}
}
3.2姓名排序
这里对strcmp()库函数的返回值进行了介绍,也是从cplusplus中所得,下面也贴上了网站。
代码及说明如下(示例):
代码段中的cplusplus在此:cplusplus.com - The C++ Resources Network
int cmp4(const void* a, const void* b)
{
//这里运用到了strcmp()函数通过该函数来对字符串进行比较
//其返回值也为int型,上述的表格中有说明(cplusplus中可以查到)
return strcmp( ((Stu*)a)->name, ((Stu*)b)->name );
}
void test4()
{
Stu s[3] = { {"zhang da hai",20},{"shu lan",22},{"gou er",10} };
int sz = sizeof(s) / sizeof(s[0]);
qsort(s, sz, sizeof(s[0]), cmp4);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%s ", s[i].name);
printf("%d ", s[i].age);
printf("\n");
}
}
总结
这里对文章进行总结:相信看到这,大家应该对qsort()库函数也有一定的了解,这里主要突出的知识点也就是函数指针。同时希望这篇文章对大家有帮助。
若觉得自己还是有点不懂那就请看看这个:(作者也才刚学)
36.指针详解(7)(C语言程序设计教程谭浩强 c语言谭浩强视频教程 c语言零基础入门教程 学习c语言 c语言视频教程 c语音 C语言教程 C语言编程项目 C语_哔哩哔哩_bilibili