qsort_s函数
概要:
#define __STDC_WANT_LIB_EXT1__ 1 #include <stdlib.h> errno_t qsort_s(void *base, rsize_t nmemb, rsize_t size, int (*compar)(const void *x, const void *y, void *context), void *context);
描述:
该函数对数组进行排序。参数base指向排序数组的初始元素,参数nmemb指定数组的元素数目,参数size指定以字节形式表示的单个数组元素的大小,参数compar指向比较函数。
数组元素按参数compar指向的比较函数升序排序。参数compar指向的比较函数存在三个参数:前两个参数指向比较的对象;第三个参数是qsort_s函数的参数context。如果第一个参数指向的对象大于、小于或者等于第二个参数指向的对象,比较函数将返回一个大于、小于或者等于0的整数。
参数context对于qsort_s函数的唯一用处是传递给比较函数用作第三个参数;比较函数执行时,该参数提供附加信息,例如:指定比较函数使用的排序序列(collating sequence)。
如果两个元素相等,它们在结果排序数组中的相对顺序ISO/IEC 9899:2018标准未作明确说明。
运行约束:
参数nmemb和参数size应不大于宏RSIZE_MAX。如果参数nmemb不等于0,参数base和参数compar不能是空指针。
如果存在运行约束冲突,qsort_s函数不会对数组进行排序。
参数:
指向排序数组初始元素的指针。
数组的元素数目。
以字节形式表示的单个数组元素的大小。
指向比较函数的指针。比较函数会被qsort_s函数反复调用,用于比较数组元素。
根据函数的返回值是大于、小于还是等于0,对数组元素进行排序,具体规则如下:
返回值 | 含义 |
大于0 | 指针x指向的元素将排在指针y指向的元素之后。 |
小于0 | 指针x指向的元素将排在指针y指向的元素之前。 |
等于0 | 指针x指向的元素与指针y指向的元素相等。 |
比较函数compar中的context参数与qsort_s函数中的context参数是相同的。
传递给比较函数用作第三个参数,比较函数执行时使用,例如:指定比较函数使用的排序序列(collating sequence)。
返回值:
如果不存在运行约束冲突,函数返回0;否则函数返回非0值。
范例:
|
|
输出:
-5 0 3 10 25
注:使用Visual Studio编译。
qsort_s函数在Visual Studio中的声明与ISO/IEC 9899:2018标准有差异,在Visual Studio中声明如下:
void qsort_s( void *base, size_t num, size_t width, int (__cdecl *compare)(void *, const void *, const void *), void *context);
base: 指向排序数组初始元素的指针。
num: 数组的元素数目。
width: 每个元素的字节数。
compare: 指向比较函数的指针。
context: 指向上下文的指针,可以是比较过程中需要访问的任何对象。
在ISO/IEC 9899:2018标准中,比较函数比较的是前两个参数的大小;在Visual Studio中,比较函数比较的是后两个参数的大小。
相关内容:
qsort | 对数组元素进行排序的函数。 |
bsearch_s | 搜索匹配数组元素的安全函数。 |