QSORT - Linux手册页
时间:2019-08-20 18:01:08 来源:igfitidea点击:
Linux程序员手册 第3部分
更新日期: 2020-06-09
名称
qsort,qsort_r-对数组排序
语法
#include <stdlib.h> void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); void qsort_r(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *, void *), void *arg);
glibc的功能测试宏要求(请参阅feature_test_macros(7)):
qsort_r():_GNU_SOURCE
说明
qsort()函数使用大小为nmemb的元素对数组进行排序。基本参数指向数组的开始。
数组的内容根据compar所指向的比较函数以升序排序,该函数通过两个指向被比较对象的参数来调用。
如果第一个参数被认为分别小于,等于或大于第二个参数,则比较函数必须返回小于,等于或大于零的整数。如果两个成员比较相等,则它们在排序数组中的顺序是不确定的。
qsort_r()函数与qsort()相同,区别在于比较函数compar采用第三个参数。指针通过arg传递给比较函数。这样,比较函数不需要使用全局变量来传递任意参数,因此可以重入并且可以在线程中安全使用。
返回值
qsort()和qsort_r()函数不返回任何值。
版本
qsort_r()已在2.8版中添加到glibc。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
qsort(),qsort_r() | Thread safety | MT-Safe |
遵循规范
qsort():POSIX.1-2001,POSIX.1-2008,C89,C99,SVr4、4.3BSD。
备注
要比较C字符串,比较函数可以调用strcmp(3),如下例所示。
示例
有关使用的一个示例,请参见bsearch(3)下的示例。
另一个示例是以下程序,该程序对命令行参数中给出的字符串进行排序:
#include <stdio.h> #include <stdlib.h> #include <string.h> static int cmpstringp(const void *p1, const void *p2) { /* The actual arguments to this function are "pointers to pointers to char", but strcmp(3) arguments are "pointers to char", hence the following cast plus dereference */ return strcmp(* (char * const *) p1, * (char * const *) p2); } int main(int argc, char *argv[]) { int j; if (argc < 2) { fprintf(stderr, "Usage: %s <string>...\n", argv[0]); exit(EXIT_FAILURE); } qsort(&argv[1], argc - 1, sizeof(char *), cmpstringp); for (j = 1; j < argc; j++) puts(argv[j]); exit(EXIT_SUCCESS); }
另外参见
sort(1),alphasort(3),strcmp(3),versionsort(3)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。