头文件
首先,qsort要先引用头文件#include<stdlib>
函数声明
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
比较难懂是不是,没事,咱们上图解释
qsort函数用法
我们先定义一个数组,并想要升序排序
那么qsort函数的传参方式为
为什么要传这4个参数呢,听我细细道来
我们既然想把arr数组改造成升序排列,那么必然要将这个数组传参。
数组传参是把首元素的地址传过去,所以qsort函数并不知道这个数组有多少个元素,所以我们要把元素个数计算出来并传参。
我们先要知道qsort函数可以排任意类型的数据,这些类型都不相同,占的空间大小也不一样,所以我们要告诉qsort函数我们要排序的数据的类型大小。
类型之间的比较方式可能会有不同,比如int型比较可以相减来比较大小,但要比较字符串的话,我们要用到strcmp函数。既然比较的方式可能会不同的话,那么我们要告诉qsort函数比较的方法,因此我们要自行定义一个函数来比较两个元素之间的大小。就例如我们要比较上图数组中两个元素的大小,可以直接做减法。因此我们定义一个这样的函数sort_int
为什么要把sort_int函数的参数设置为无具体类型的指针呢?因为我们可能会比较不同类型的元素,而void*可以接收任意地址,所以无具体类型指针当选。接着我们通过比较两个元素的大小,把返回值传到qsort函数中,这里们还需要知道,当返回值大于0时,即前面元素大于后面元素,且我们的目的是升序,所以两元素交换。当返回值等于0时,两元素相等。当返回值小于0时,前元素小于后元素,不交换。
这样我们就可以把arr数组中的元素进行升序排序了