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)。

InterfaceAttributeValue
qsort(),qsort_r()Thread safetyMT-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/