【C语言】指针的应用:神奇的快排函数——qsort(上)

Hello everbody!今天给大家讲讲一个神奇的快速排序函数——qsort。之所以说它神奇,是因为它可以排序任意类型的数据。不仅仅可以排数组,结构体也同样可以排序。该函数的功能既然可以如此强大,那自然有它特殊之处。那废话不多说,咱们先介绍一下这个函数是如何使用的。

【C语言】指针的应用:神奇的快排函数——qsort(上)_第1张图片

1.qsort函数的参数

qsort函数一共需要四个参数:

第一个参数是void* base,就是待排序数组的第一个元素地址,对于数组而言就是数组名。刚学c语言的宝子可能不知道void*是个什么鬼。其实这就是qsort函数功能强大的原因。void*属于一种指针类型,名叫泛指针。它可以接收任意的指针类型,比如整型指针,字符指针等等。但是它也有不足之处:void*类型的指针不可以解引用,不可以进行加减整数操作,因此在传参后,需要将其强制类型转化成对应的具体类型的指针,才可以进行指针的正常操作!

第二个参数是size_t num意思是待排序数组的元素个数。size_t在32位操作平台下代表unsigned int,在64位操作平台下代表long long unsigned int。

第三个参数是size_t size意思是待排序数组中单个元素所占空间的大小单位是字节。例如一个整型数组,每个元素占四个字节,那么这里就填4。

第四个参数是int (*cmp)(const void*,const void*),这个参数就有点意思了。首先通过(*cmp)可以知道,cmp是一个指针,而后面又跟了一个括号:(const void*,const void*),这和函数的结构是相同的,说明cmp是一个函数指针,该函数指针指向的函数需要两个参数:都是const void*,返回值是int。该函数需要完成的任务是通过传进去的两个const void*指针完成待排序数组中元素之间的比较,如果第一个指针指向的元素大则返回>0的数,两者相等则返回等于0的数,若第一个指针指向的元素小,则返回<0的数。

2.qsort函数的使用

2.1qsort排整型数组

咱们根据qsort需要的四个参数,先拿整型数组练练手。

【C语言】指针的应用:神奇的快排函数——qsort(上)_第2张图片

当然,qsort也有自己的头文件:stdlib.h

在上图中我给qsort传了前三个比较简单的参数,应该是比较简单的。当然,第四个参数才是重头戏。

【C语言】指针的应用:神奇的快排函数——qsort(上)_第3张图片

我们可以看到,在传第四个参数时,我们需要定义一个函数,这个函数提供了待排序数组中元素的比较方式。由于void*类型的指针不可以解引用,所以需要强转成整型指针再解引用。

【C语言】指针的应用:神奇的快排函数——qsort(上)_第4张图片

这是运行结果。

2.2qsort排结构体数组

2.2.1排整型成员

【C语言】指针的应用:神奇的快排函数——qsort(上)_第5张图片

注意嗷,这样写是有问题的,应该把结构体的定义放在cmp_by_score的前面。应该是先定义结构体,再交给cmp_by_score函数调用。

【C语言】指针的应用:神奇的快排函数——qsort(上)_第6张图片

以上是运行后的结果。

2.2.2排字符串成员

【C语言】指针的应用:神奇的快排函数——qsort(上)_第7张图片

排字符串需要用到strcmp函数,它是专门用来比较字符串大小的,它需要两个字符指针即可完成比较。第一个字符串大于第二个字符串,返回大于0的数。第一个字符串等于第二个字符串,返回0.第一个字符串小于第二个字符串,返回小于0的数。

3.结语

那么qsort函数的使用就介绍到这里叭,不知道你学会了嘛?有疑问的宝子可以在评论区留言提问呦!

你可能感兴趣的:(c语言,1024程序员节,开发语言)