指针(6)---qsort函数

2024-06-18 15:21:06 浏览数 (1)

qsort函数的含义

qsort函数是一个排序函数,它是基于快速排序的算法来排序的。

qsort是一个库函数,是可以直接拿来使用的。所包含的头文件:stdlib.h

qsort函数的格式

代码语言:javascript复制
void qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *));

该函数包含四个参数,按照前后顺序分别是

待排序数组的起始位置base

待排序数组的元素个数num

待排序数组的元素大小size

所遵循的排序规则*compar

接下来依次介绍

base

我们都知道数组的起始位置其实就是数组名,所以这里的含义其实也就是数组名的意思。而且由于可能要排序任意类型的数据,故设计成void*

num

一般来说我们计算数组的元素个数都是使用sizeof(arr) / sizeof(arr[0])这种类似的形式来表示

size

元素大小就是一个元素的大小,我们使用sizeof(该元素的类型)来表示

compar

排序规则可以说是这四个参数中最重要也是最难理解的一个,但实际上只要我们理解它作为一个规则的本质,也可以轻松理解。

排序实际上也就是对前后两个数的比较,然后根据规则将一个数排在前面一个在后面。

所以我们需要额外定义一个函数来实现比较compare。而*comapr也就是指向这个函数的指针。

举例:

代码语言:javascript复制
int cmp(const void *a,const void *b) 
{
	return *(char*)a-*(char*)b;
}

这个比较函数应当返回一个负数、零或正数,分别表示a小于b、a等于b或a大于b。

同时在返回值中我们要进行强制类型转换成char*,达到跳过字节的作用,这样才能实现排序(数据位置的调换),同时需要注意的是,一般都是使用char*,因为char类型的字节大小是1,是最灵活的,像int类型字节大小是2,它不能实现非2倍数的数据调换例如7字节。

qsort函数按照比较函数的规则对数组进行排序,然后将排序结果保存在原数组中。

qsort函数的应用包括但不限于:

  1. 对整型、浮点型、字符型等基本数据类型的数组进行排序。
  2. 对自定义数据类型的数组进行排序,只需提供相应的比较函数。
  3. 对结构体数组进行排序,可以根据结构体的某个成员变量进行排序。
  4. 对指针数组进行排序,可以按照指针指向的值进行排序。

0 人点赞