目录
一.了解qsort函数
输入参数与返回类型:
返回类型: void
输入参数:
base(待排序数据的起始地址),num(待排序数据的元素个数)
size(待排数据的元素的大小),cmp(比较两个元素的大小指针)
比较函数cmp的定义时,需要注意的是:
若参数一 e1 > 参数二 e2 返回值大于零
若参数一 e1 = 参数二 e2 返回值等于零
若参数一 e1 < 参数二 e2 返回值小于零
注意:
为了具有普适性(可以比较字符类型,整型,结构体类型等多种类型),从而在第一个指针参数的类型和第四个比较函数所输入的指针参数类型都是用的是:void*,因此在使用到具体的类型是需要强制类型转换
qsort的使用
排序整型数组:
排序结构体数组:
二.qsort的实现
实现qsort的前提与要点
在开始之前,我们先看一个冒泡排序:
这个冒泡排序只适用于整型排序,因此我们需要改掉的只是他的比较部分的函数以及交换部分的函数
比较部分的修改:
我们需要使比较函数中的两个指针指向被比较的两个数据,我们需要对指针进行加法运算
首先这两个指针是void类型的指针,不可以直接来进行加法运算。
其次我们不知道实际被比较的数据的类型,无法直接强制类型转换成该数据。
但是,我们知道被一个比较数据所占字节的个数。
因此,可以将这两个指针强制类型转化为char*类型来进行加法运算。
交换部分的修改
由于每个数据都是由若干个字节构成,那么交换两个数据就可以通过交换它们的每个字节来完成。
代码实现: