C语言库函数中qsort()的用法
qsort是库函数提供的一种排序方法,我们就简单1了解一下怎么去用,而不去深究它的库函数是怎么写的
qsort是库函数中提供的一种能排序任何类型的数据的一种排序方法,思想是quick sort(快速排序),今天我听鹏哥讲指针,刚好引入了这一点,我就趁热打铁,总结一下该排序的用法
(一)void* 的指针类型是什么?
void*类型的指针是能接受任何数据类型的地址,但是void*的指针类型是不能进行解引用操作的,也不能进行加减整数的操作,因为void*不知道它会占用多少个字节
(二)void qsort(void*, size_t, size_t, int ( * )(const void * , const void * )) 该怎么使用该库函数?
我们先来看看qsort()内部有些什么参数,参数类型是什么,该怎么用。
void qsort(void* base, size_t, size_t, int ( * )(const void * , const void * ))
可以看出共有四个参数
1.void1* base:待排序数组的首地址,可直接输入待排序数组名,也可使用指针指向该数组
2.size_t num:数组的长度,假如有数组int arr[ ]用sz=sizeof(arr)/sizeof(arr[0])来计算数组的长度
3.size_t width:数组中的元素所占字节,可用sizeof(arr[0])来计算单个元素的字节数
4.
:从这个形式可看出这是一个函数指针类型的参数,意味着将要调用一个函数,而这个函数在库函数中表示进行排序的方式
这里简单解释一下这个函数指针的意义
int 表示返回的是一个int类型的值
cmp表示函数名,*cmp表示指向这个函数
(const void* e1,const void* e2)这里·的e1,e2表示将要进行比较的两个元素,然后将两个元素的地址传到函数里,const表示无法修改指针指向的值
(三)使用qsort()来排序不同类型的数据
1.整型
2.浮点型
3.结构体数据类型(数字,字符串)
下面我创建了一个机构体,我先以结构体中年龄排序
然后以姓名排序