qsort函数还不会用?赶快进来

文章介绍了C语言标准库中的qsort函数,用于对任意类型数据进行排序。关键在于理解其四个参数的意义:数组首地址、元素个数、元素大小和自定义比较函数。通过自定义的比较函数sort_int,实现对整数数组的升序排列,展示了void*类型指针在处理不同类型数据中的灵活性。
摘要由CSDN通过智能技术生成

头文件

首先,qsort要先引用头文件#include<stdlib>

函数声明

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

比较难懂是不是,没事,咱们上图解释

qsort函数用法

我们先定义一个数组,并想要升序排序

那么qsort函数的传参方式为

为什么要传这4个参数呢,听我细细道来

  1. 我们既然想把arr数组改造成升序排列,那么必然要将这个数组传参。

  1. 数组传参是把首元素的地址传过去,所以qsort函数并不知道这个数组有多少个元素,所以我们要把元素个数计算出来并传参。

  1. 我们先要知道qsort函数可以排任意类型的数据,这些类型都不相同,占的空间大小也不一样,所以我们要告诉qsort函数我们要排序的数据的类型大小。

  1. 类型之间的比较方式可能会有不同,比如int型比较可以相减来比较大小,但要比较字符串的话,我们要用到strcmp函数。既然比较的方式可能会不同的话,那么我们要告诉qsort函数比较的方法,因此我们要自行定义一个函数来比较两个元素之间的大小。就例如我们要比较上图数组中两个元素的大小,可以直接做减法。因此我们定义一个这样的函数sort_int

为什么要把sort_int函数的参数设置为无具体类型的指针呢?因为我们可能会比较不同类型的元素,而void*可以接收任意地址,所以无具体类型指针当选。接着我们通过比较两个元素的大小,把返回值传到qsort函数中,这里们还需要知道,当返回值大于0时,即前面元素大于后面元素,且我们的目的是升序,所以两元素交换。当返回值等于0时,两元素相等。当返回值小于0时,前元素小于后元素,不交换。

这样我们就可以把arr数组中的元素进行升序排序了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hsifles

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值