qsort函数的含义
qsort函数是一个排序函数,它是基于快速排序的算法来排序的。
qsort是一个库函数,是可以直接拿来使用的。所包含的头文件:stdlib.h
qsort函数的格式
void qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *));
该函数包含四个参数,按照前后顺序分别是
待排序数组的起始位置base
待排序数组的元素个数num
待排序数组的元素大小size
所遵循的排序规则*compar
接下来依次介绍
base
我们都知道数组的起始位置其实就是数组名,所以这里的含义其实也就是数组名的意思。而且由于可能要排序任意类型的数据,故设计成void*
num
一般来说我们计算数组的元素个数都是使用sizeof(arr) / sizeof(arr[0])这种类似的形式来表示
size
元素大小就是一个元素的大小,我们使用sizeof(该元素的类型)来表示
compar
排序规则可以说是这四个参数中最重要也是最难理解的一个,但实际上只要我们理解它作为一个规则的本质,也可以轻松理解。
排序实际上也就是对前后两个数的比较,然后根据规则将一个数排在前面一个在后面。
所以我们需要额外定义一个函数来实现比较compare。而*comapr也就是指向这个函数的指针。
举例:
int cmp(const void *a,const void *b)
{
return *(char*)a-*(char*)b;
}
这个比较函数应当返回一个负数、零或正数,分别表示a小于b、a等于b或a大于b。
同时在返回值中我们要进行强制类型转换成char*,达到跳过字节的作用,这样才能实现排序(数据位置的调换),同时需要注意的是,一般都是使用char*,因为char类型的字节大小是1,是最灵活的,像int类型字节大小是2,它不能实现非2倍数的数据调换例如7字节。
qsort函数按照比较函数的规则对数组进行排序,然后将排序结果保存在原数组中。
qsort函数的应用包括但不限于:
- 对整型、浮点型、字符型等基本数据类型的数组进行排序。
- 对自定义数据类型的数组进行排序,只需提供相应的比较函数。
- 对结构体数组进行排序,可以根据结构体的某个成员变量进行排序。
- 对指针数组进行排序,可以按照指针指向的值进行排序。